凑一篇文章 咳咳 详细解读一下vue的监听属性
watch监听的对象可以是某个已存在的值:只要这个值改变就触发当前方法。这个函数可以有两个形参,第一个是当前的值,第二个是变化后的值;当然也可以没有,下面依次类推
watch监听的对象可以是函数:当我们监听的数据发生变化时,需要执行的函数,后半句同上。
watch监听的对象也可以是method中的函数名:函数名要用引号来包裹。
watch监听的对象也可以是computed中的值:计算就改动。
watch监听的也可以是包括选项的对象:
{
1,第一个值handle:其值是一个回调函数,就是监听对象对话的时候需要执行的函数
2,第二个值deep:其值true 或者 false,是否深度监听(一般监听是不能监听到对象属性值变化的,数组除外)
3,第三个值immediate:其值 true 或者 false,是否以当前的初始值执行handle函数(当值第一次绑定时,不会执行监听函数,只有值发生改变时才会执行。如果我们需要在最初绑定值的时候也执行函数,则就需要用到immediate属性。)。
}
(1)通过watch监听data数据的变化,数据发生变化时,就会打印当前的值
watch: {
data(val, newval) {
console.log(val)
console.log(newval)
}
}
或
watch: {
data() {
console.log('改变')
}
}
(2)通过watch监听docData数据的变化,数据发生变化时,this.change_number++(使用深度监听)
watch: {
docData: {
handler(newVal) {
this.change_number++
},
deep: true,
immediate: false,
}
}
(3)通过watch监听data数据的变化,数据发生变化时,执行changeData方法
watch: {
data: 'changeData' // 值可以为methods的方法名
},
methods: {
changeData(curVal,oldVal){
conosle.log(curVal,oldVal)
}
}
(4)通过watch监听data里对象的变化,数据发生变化时,执行changeData方法
data() {
return {
aaa: "first",
bbb: "{
ccc:1,
ddd:2
}"
};
},
watch: {
'bbb':{
//也可以没有入参
handler(newValue,oldValue){
console.log('属性isHot被修改了',newValue,oldValue);
},
mmediate:true, // 该参数设置为true,可以在初始化的时候让handler调用一下
deep:true // 该参数设置为true,可以监听到对象内的属性 而不止于当前对象
'触发执行'
}// 值可以为bbb的对象名
},
简写
算了没啥简写
就是没有 mmediate deep 这俩属性的 入参都没有的 都可以
例如
watch: {
docData(){
// docData动了就执行
}
}
且
app.$watch('isHot',function(newValue,oldValue){
console.log('属性isHot被修改了',newValue,oldValue);
})
这样也行 (上面app是当前vue所挂载的的实例)