数据的双向绑定失败

如标题所述,这里有一个需求是获取到表格数据之后,要通过接口调用每一行表格数据的权限问题,所以我给相关的按钮绑定了v-if的条件,但是当满足条件的时候,相关满足权限的按钮并没有展示出来:
account.delete表示从接口获得的删除权限
在这里插入图片描述
采用v-if或者disabled来显示用户的权限操作
在这里插入图片描述

<template>
    <div>
        <table-list v-if="ceshi" :selected.sync="opaList" :table-data="tableData" :face-url="faceUrl">
            <el-table-column label="操作" align="center" width="200">
                <template slot-scope="scope">
                    <el-button
                        v-if="judgeRights(scope.row)"
                        type="text"
                    >
                        删除
                    </el-button>
                </template>
            </el-table-column>
        </table-list>
    </div>
</template>

<script>
import TableList from '../components/table/TableList';
import Mixin from '../mixins/mixin';
export default {
    components: {
        TableList,
    },
    mixins: [Mixin],
    data() {
        return {
            tableData: [],
            opaList: [],
            mediaForRights: {},
            ceshi: false,
        };
    },
    computed: {
        judgeRights() {
            return function(row) {
                const ceshi = row.RIGHTS && row.RIGHTS.length && row.RIGHTS.includes('account.delete');
                console.log(ceshi, 'ceshi');
                return ceshi;
            };
        },
    },
    created() {
    },
    mounted() {
        this.type = this.$route.name || '';
        this.initData();
    },
    methods: {
        initData() {
            const params = this.getInitParams().initDataParams;
            this.$axios.get('************', { params: params }).then(res => {
                this.tableData = res.DATA;
                this.ceshi = false;
                this.$nextTick(() => {
                    this.ceshi = true;
                }
                );
                this.page = res.PAGER;
                this.getRights(this.tableData);
            });
        },
        /**
         * @description: 获取每一项的权限
         * @param {*} list
         * @return {*}
         */
        getRights(list) {
            this.ceshi = false;
            if (list && list.length) {
                list.map(item => {
                    const params = this.mediaForRights[this.type].params;
                    if (this.type === 'Kuaishou') {
                        params.KUAISHOUACCOUNTID = item[this.mediaForRights[this.type].keys.id];
                    }
                    this.$axios.get('*********', { params: params }).then(res => {
                        const arry = [];
                        res.map(item => {
                            arry.push(item.OPERNAME);
                        });
                        item.RIGHTS = arry;
                    });
                });
            }
            this.ceshi = true;
        },
    
    },
};
</script>

问题所在:这种在传入参数中赋值循环的item做法是很神奇的操作,自己也会看蒙蔽
在这里插入图片描述
在这里插入图片描述
这里为了检查我才用了三种方法给tableData赋值,分别是:
ps:index就是循环遍历的序号:
在这里插入图片描述
结果是只有第一种情况可以展示出来删除按钮,
在这里插入图片描述

但是其实三者最后都会给tableData赋值。
在这里插入图片描述

所以顺便在看了一下seter的使用,以及为什么要用到这玩意?
原因:
vue不能检测出通过数组的索引至今修改一个数组项,也不能监测出对象property的添加或者移除

官方 - 由于 JavaScript(ES5) 的限制,Vue.js 不能检测到对象属性的添加或删除。因为 Vue.js 在初始化实例时将属性转为 getter/setter,所以属性必须在 data 对象上才能让 Vue.js 转换它,才能让它是响应的
相关参考连接:

Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值