为了账号安全,请及时绑定邮箱和手机立即绑定

vue 深度watch,新值和老值打印出来结果一致,怎么解决?

标签:
Vue.js

watch的基本用法:

watch:{
  watchData: function (value, oldValue) {
      console.log(value, oldValue)
  }
},

但是如果需要监听的数据如下:

data: () => ({
    tableAll:{
       tableData:[]
    }
}),

则需要用到watch中的deep属性。

于是我们写成了这个:

computed:{
  newTableData(){
    return this.tableAll.tableData
  }
},
watch:{
  newTableData: {
    handler: function (value, oldValue) {
      console.log(value, oldValue)
    },
    deep: true
  }
},

但是问题来了,deep属性设置为true后,你查看控制台会发现,value 的值总是跟oldValue值一样。如果你的业务需要对这两个值(value,oldValue 均为数组)进行比较并提取出不同部分的话,这样就比较惆怅,那怎么办咩?

解决代码如下:

computed:{
  newTableData(){
    return JSON.stringify(this.tableAll.tableData)
  }
},
watch:{
  newTableData: {
    handler: function (value, oldValue) {
        let obj = JSON.parse(value);
            let obj2 = JSON.parse(oldValue);
        console.log(obj, obj2)
    },
    deep: true
  }
},

思路:就是将我们需要的值进行序列化和反序列化。这样打印出的值就是我们想要的了。

还有更好的思路的同学,希望在评论处贴出你的方法,交流学习一下。

点击查看更多内容
3人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
Web前端工程师
手记
粉丝
61
获赞与收藏
656

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消