【vue】$watch用法;取消监听;监听子组件的属性

248 阅读1分钟

this.$watch(expOrFn,callback,[option])

expOrFn:可以是字符串(对应data中的数据名)或函数(监听return 值)

callback:为expOrFn的值或返回值发生变化后调用的函数(默认接收2个参数,分别是变化的新值,和变化之前的旧值)

option:是可选参数为一个对象。可以设置deep或immediate属性的值为true((默认都为false)),

  • deep:为了发现对象内部值的变化,可以在选项参数中指定 deep: true。注意监听数组的变更不需要这么做
  • immediate:在选项参数中指定 immediate: true 将立即以表达式的当前值触发回调

注意:在带有 immediate 选项时,你不能在第一次回调时取消侦听给定的 property。 如果你仍然希望在回调内部调用一个取消侦听的函数,你应该先检查其函数的可用性:

var unwatch = this.$watch('value',  function () {  
    doSomething()  
    if (unwatch) {  
        unwatch()  
    }  
},  { immediate: true }  )

以下是不同的写法:

this.$watch('a', (newVal, oldVal) => {
    
})

this.$watch('obj.name', (newVal, oldVal) => {

})

this.$watch( () => this.obj.name, (newVal, oldVal) => { 
 
})

// 表达式 `this.unit + this.name` 每次得出一个不同的结果时
// 处理函数都会被调用。
// 这就像监听一个未被定义的计算属性
this.$watch( () => this.unit + this.name,(newVal, oldVal) => {
     
})

this.$watch('obj', (newVal, oldVal) => { 

}, { deep: true, immediate: true })

// composition API可以使用数组来同时侦听多个
watch([fooRef, barRef], ([foo, bar], [prevFoo, prevBar]) => {

})

composition API可以看: # CompositionAPI中的watch与watchEffect

this.$watch 返回一个取消观察函数,用来停止触发回调:

var unwatch = this..$watch('a', cb)  

// 之后取消观察  
unwatch()

$watch监听子组件的属性

watch它只能监听Vue实例的数据变化。如果想要监听子组件的属性,可以使用$watch。

this.$watch(
      function () {
            return this.$refs.detailForm.$refs.advanceIns[1].$refs.advanceDialog.dialogVisible;
      },
      function (newval) {
                   
      }
}

参考:blog.csdn.net/wu_xianqian…

v2.cn.vuejs.org/v2/api/#vm-…

blog.csdn.net/m0_56347363…