1: watch 使用的几种方法
   通过watch 监听data 数据变化, 数据发生变化时, 就会打印当前值:
   watch: {
     data(val, oldValue) {
       console.log(val);
       console.log(oldValue);
     }
   }

2: 通过watch 监听docData 数据的变化, 数据发生变化时, this.change_number++
   (使用深度监听)
   watch: {
     handler(newVal) {
       this.change_number++
     }
     deep: true
   }
3: 通过watch 监听data 数据变化, 数据发生变化时, 执行changeData() 方法
    watch: {
      data: "chnageData"
    },

    methods: {
      changeData(curVal, oldVal) {
        console.log(curVal, oldVal);
      }
    }
3: 详解watch 监听器中immediate, handler 和deep 属性
   immediate 和 handler 
   这样使用watch 有一个特点, 就是当值第一次绑定他的时候, 不会执行监听函数, 只有孩子发生改变时才会执行。 如果我们在最初绑定值的也会执行函数, 则就需要使用到 immediate 属性。

 watch: {
   docData: {
     handler(neVal) {
       this.chnage_number++
     }
     immediate: true
   }
 }

4: deep 当需要监监听一个对象改变的时候, 普通的watch 方法无法监听到普通对象内部属性, 此时就需要 
   deep 属性对对象进行深度监听
   
   data() {
     return {
       docData: {
        'doc_id': 1,
        'tpl_data': 'abc'
       }
     }
   }   

   watch: {
      docData: {
        docData: {
          handler(newVal) {
            this.change_number++
          }    
        }
        deep: true
      }
   }

 设置为deep: true 则可以监听到docData_id 的变化, 此时会给dicData 的所有属性都加上这个监听器,  
 当对象属性比较多时, 每一个属性的变化都会执行handler。 如果只需要监听对象中一个属性值, 则可以做 
 一下优化: 使用字符串的形式监听对象。
 data() {
   return {
    docData: {
      'doc_id': 1,
      'tpl_data': 'abc'
    }
   }
 }
  
 watct: {
   'docData.doc_id': {
      handler(newVal, oldVal) {
        ....
      }
    }
    deep: true;
 }

 数组(一维, 二维) 的变化是不断需要通过监听器来进行监听,  对象数组中对象的属性变化则需要使用deep 深度监听。

Logo

前往低代码交流专区

更多推荐