不少时候,咱们监听一个属性,不会使用到改变先后的值,只是为了执行一些方法,这时能够使用字符串代替vue
data:{ name:'Joe' }, watch:{ name:'sayName' }, methods:{ sayName(){ console.log(this.name) } }
总所周知,watch是在监听属性改变时才会触发,有些时候,咱们但愿在组件建立后watch可以当即执行一次。api
可能想到的的方法就是在create生命周期中调用一次,但这样的写法不优雅,或许咱们能够使用这样的方法数组
data:{ name:'Joe' }, watch:{ name:{ handler: 'sayName', immediate: true } }, methods:{ sayName(){ console.log(this.name) } }
上面咱们给入一个对象函数
handler: 触发监听执行的方法(须要用到改变先后的值时,可换成函数)this
immediate: 监听开始以后被当即调用spa
在监听一个对象时,当对象内部的属性被改变时,没法触发watch,咱们能够继续使用对象的方式为其设置深度监听code
data:{ studen: { name:'Joe', skill:{ run:{ speed: 'fast' } } } }, watch:{ studen:{ handler: 'sayName', deep: true } }, methods:{ sayName(){ console.log(this.studen) } }
设置deep为true后,不管嵌套多深,只要属性值被改变都会触发监听。但这种方式开销会较大,监听器会一层一层往下找,为每一个属性添加监听器。对象
若是咱们只是监听对象的某个属性改变时,能够这样作:blog
watch:{ 'studen.name':{ handler: 'sayName' } }
使用数组能够设置多项,形式包括字符串、函数、对象生命周期
data:{ name:'Joe' }, watch:{ name:[ 'sayName1', function(newVal, oldVal){ this.sayName2() }, { handler: 'sayName3', immaediate: true } ] }, methods:{ sayName1(){ console.log('sayName1==>', this.name) }, sayName2(){ console.log('sayName2==>', this.name) }, sayName3(){ console.log('sayName3==>', this.name) } }