vue watch监听对象及对应值的变化
类型:string | Function | Objectvue官网解释: 一个对象,键是需要观察的表达式,值是对应回调函数。值也可以是方法名,或者包含选项的对象。Vue 实例将会在实例化时调用 $watch(),遍历 watch 对象的每一个属性。也就是说watch可以监听对象的变化,规则是键值对方式。export default {props: {fat...
·
类型:string | Function | Object
vue官网解释: 一个对象,键是需要观察的表达式,值是对应回调函数。值也可以是方法名,或者包含选项的对象。Vue 实例将会在实例化时调用 $watch(),遍历 watch 对象的每一个属性。
也就是说watch可以监听对象的变化,规则是键值对方式。
export default {
props: {
fatherAjaxData: {
type: Object
}
},
data() {
return {
a: 1,
b: 2,
c: 3
}
}
},
watch: {
// 父级异步加载的数据 props 方式给到 当前子级
fatherAjaxData: function (val, oldVal) {
this.$nextTick(() => {
console.log('监听到已异步加载的fatherAjaxData数据 已有值');
});
},
a: function (val, oldVal) {
console.log(`watch a val change --- new val: ${val}, old val: ${oldVal}`);
},
// watch_b_val_change 方法名
b: 'watch_b_val_change',
c: {
handler: function (val, oldVal) {
console.log(`watch c val change --- new val: ${val}, old val: ${oldVal}`);
},
deep: true // 为了发现对象内部值的变化,可以在选项参数中指定 deep: true 。注意监听数组的变动不需要这么做。
}
},
mounted() { // vue 生命周期方法 vue页面全部加载完毕(不包括异步数据)
this.$nextTick(() => {
console.log('vue页面加载完毕!');
});
},
methods: {
watch_b_val_change(val, oldVal) {
console.log(`watch b val change --- new val: ${val}, old val: ${oldVal}`);
}
}
};
this.$nextTick
:vue生命周期方法 当数据发生变化 dom变化后 执行$nextTick
的callback方法
deep: 为了发现对象内部值的变化,可以在选项参数中指定 deep: true 。注意监听数组的变动不需要这么做。
vm.$watch('someObject', callback, {
deep: true
})
vm.someObject.nestedValue = 123
// callback is fired
例子二:
var vm=new Vue({
data:{
a:1,
b:{
c:1
}
},
watch:{
a(val, oldVal){//普通的watch监听
console.log("a: "+val, oldVal);
},
b:{//深度监听,可监听到对象、数组的变化
handler(val, oldVal){
console.log("b.c: "+val.c, oldVal.c);//但是这两个值打印出来却都是一样的
},
deep:true
}
}
})
vm.a=2
vm.b.c=2
a是一个普通的值,当a的值变化时会被监听到,b是一个对象,不能直接像a那么写,需要深度监听才能捕捉到,但是当我想去捕捉b对象中某一个值的变化时却发现,打印出来的两个值是不一样的,如图:
这样就只能知道对象发生变化却不知道具体哪个值发生了变化,如果想监听对象某一个值得变化可以利用计算属性computed
var vm=new Vue({
data:{
b:{
c:1
}
},
watch:{
newValue(val, oldVal){
console.log("b.c: "+val, oldVal);
}
},
computed: {
newValue() {
return this.b.c
}
}
})
vm.b.c=2
用watch去监听computed计算过的值就可以直接知道是哪个对应的值发生了变化,结果如图:
更多推荐
已为社区贡献4条内容
所有评论(0)