watch监听一个数组新旧值一样的问题解决

项目场景:

在写项目时有一个需求是这样的在一个简单的 el-table 表格里 ①修改 执行用例数量这个字段的值时 同时改变通过用例数量的值 但是 ②修改通过用例数量时却不能同步改执行用例数量的值


解决方案:

思路1: 

一开始想着把v-model的值都绑定成total这个字段 但是发现不能满足需求② 所以弃用了

思路2:

监听 e-table 的 data 数据 当里面的某一项total字段被改变的时候来改变passCount 这个字段

说干就干... 


代码演示加解释:

 

这里我的表格data数据为 PassRateTableData 结构 是这样的

直接在watch里面监听 PassRateTableData 的话会发现一个问题 打印的新旧值都一样没办法完成我的逻辑 我要根据新旧值的不同去判断total是否改变 从而改变 passCount的值 

究其原因,就是vue新旧的值只是简单的赋值,对于引用类型来说指向的都是同一个地址,值自然也相同,所以利用计算属性进行深拷贝就可以解决问题(computed缓存依赖需要监听的对象,正好进行深拷贝)


解决方案:

现在computed写上

computed:{

        newPassRateTableData(){

            return JSON.parse(JSON.stringify(this.PassRateTableData));

        }

 },

将 PassRateTableData 拷贝一份 然后再watch里监听

通过 computed 计算属性的配合,先计算出需要监听的属性后用watch监听

不通过deep,仍然可以深度监听计算出来的数据

从性能以及可读性考虑,个人比较推荐 computed 计算属性的配合

猜你喜欢

转载自blog.csdn.net/weixin_63443983/article/details/130215930
今日推荐