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
      }
    }
  • 相关阅读:
    C# 字符串转为DateTime类型
    多线程的注意事项
    linux 安装中文支持
    发布网站遇到的坑
    配置iis支持json解析,配置ssi
    SEO之图片优化
    SEO之面包屑导航
    SEO之HTML标签
    SEO之优化代码
    SEO之网站内部结构优化
  • 原文地址:https://www.cnblogs.com/aidixie/p/13366600.html
Copyright © 2011-2022 走看看