虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。Vue通过watch选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的,在实际开发中可以解决自定义封装组件或是插件,异步初始化数据获取不到的问题。
看一样看watch基本用法,代码如下:
<input type="text" :value="name"/><button type="button" @click="name='李四'">改名</button>
<script>
new Vue({
el:"#app",
data(){
return {
name:"张三"
}
},
watch:{
name(newVal,oldVal){
console.log("更新后:"+newVal,"更新前:"+oldVal);
}
}
})
</script>

如果出现对象嵌套,想改变对象里面的某一属性值时,可以这样写,代码如下:
<input type="text" :value="classify.children.title"/><button type="button" @click="classify.children.title='猪肉串'">更新</button>
new Vue({
el:"#app",
data(){
return {
classify:{
title:"肉类",
children:{
title:"羊肉串"
}
}
}
},
watch:{
"classify.children.title"(newVal,oldVal){
console.log("更新后:"+newVal,"更新前:"+oldVal);
}
}
})
深度监听
在实际开发中还会遇到数组多层嵌套,这时要用watch的深度监听功能,来监听数组的变化,代码如下:
watch:{
classifys:{
handler(val){
console.log(JSON.stringify(val));
},
deep:true//深度监听
}
}