zoukankan      html  css  js  c++  java
  • Vue watch 监听复杂对象变化,oldvalue 和 newValue 一致的解决办法。

    watch的常规用法:

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

    但是如果需要监听的数据是对象、内嵌多层的对象后,需要用到watch中的deep属性。类似于下面这种对象内嵌的对象:

    data(){
        return {
            dataList: [
                {
                    name: "里斯",
                    age: 18,
                    sex: ""
                },
                {
                    name: "阿里路亚",
                    age: 16,
                    sex: ""
                }
            ]
        }
    }

    如果tableData内部属性发生了变化,通过watch就会打印出newValue,oldValue,但是他们打印出来的结果都是一样的。因为数据同源,虽然可以监听到数据发生了变化,但是要比较数据差异就不行了。如果想要得到差异内容,可以结合计算属性、序列化、反序列化生成新的对象,来避免此问题 。代码如下;

    computed:{
      dataListNew(){
          return JSON.parse(JSON.stringify(this.dataList));
        }
    },
    watch:{
      dataListNew: {
        handler: function (newValue, oldValue) {
            console.log(newValue, oldValue);
        },
        deep: true
      }
    }
  • 相关阅读:
    Liunx cal
    Liunx read
    IOS
    IOS
    ARPSpoofing教程(四)
    ARPSpoofing教程(三)
    ARPSpoofing教程(二)
    数据结构与算法分析
    hdu 2034
    hdu 2042
  • 原文地址:https://www.cnblogs.com/aidixie/p/13366600.html
Copyright © 2011-2022 走看看