vue watch监听对象及对应值的变化

var vm=new Vue({
    data:{
        x:1,
        info:{
            name:"gmx",
            age:18,
            sex:1
        }
    },
    watch:{
        x(val, oldVal){//普通的watch监听
            console.log("x: "+val, oldVal);
        },
        info:{//深度监听,可监听到对象、数组的变化
            handler(val, oldVal){
                console.log("info.name: "+val.name, oldVal.name);//但是这两个值打印出来却都是一样的
            },
            deep:true
        }
    }
})
vm.x=2
vm.info.name='gmx'

a是一个普通的值,当a的值变化时会被监听到,b是一个对象,不能直接像a那么写,需要深度监听才能捕捉到,里面的deep设为了true,这样的话,如果修改了这个info中的任何一个属性,都会执行handler这个方法。不过其实这样开销是蛮大的,尤其是对象里面结构嵌套过深的时候。而且有时候我们就想关心这个对象中的某个属性,比如name,这个时候可以这样:

watch: {
     'info.name': {
         handler: function() {
            //do something
         },
     }
}

或者还可以这样巧用计算属性,然后用watch去监听computed计算过的值就可以直接知道是哪个对应的值发生了变化

computed: {
    //getName只是随便取个名字作为这次计算的名字
    getName() {
    	return this.info.name  //这次计算的属性是哪个属性
    }
}
watch: {
     //观察getName这次计算有啥变化
     getName(val, oldVal) {
        
            //do something
        
     }
}

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值