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) {
}
}