监听数组嵌套对象

监听数组

data () {
    return {
        demo: [1,2]
    }
},
watch: {
    demo(val){
        console.log(val)
    }
}
  1. 可监听的数组变动:watch能监听到数组的push操作引发的改变。
myVue.demo.push(3) //[1,2,3]
  1. 不可监听的数组变动及解决方法:watch不能检测某个值变化或者长度变化引发的改变:
    • 利用索引直接设置一个项时,例如:myVue.demo[1] = 5
    • 修改数组的长度时,例如:myVue.demo.length = 2

解决方法是删除原有键,再使用$set设置一个新的,这样就可以触发watch,例如:
myVue.$set(myVue.demo,0,8) // [8,2,3]

监听数组嵌套对象

data () {
    return {
        demo:[
            {
                name:'张三',
                age:18
            },
            {
                name:'李四',
                age:20
            }
        ]
    }
},

若想对数组嵌套对象进行监听,需要深度监听。例如:

watch: {
    demo: {
        handler (val) {
            console.log(val)
        },
        // 这里是关键,代表递归监听 demo 的变化
        deep: true
    }
}
myVue.demo[0].age = 30  //[{name:'张三',age:30},{name:'李四',age:20}]

监听对象

data () {
    return {
        demo:{
            name: '张三',
            child: {
                name: '李四',
                age: 20
            }
        }
    }
},
  1. 类似数组深度监听的方式:可以像数组嵌套对象监听那样,通过深度监听来监听对象内部深层次的变化。
  2. 直接监听对象中的值:例如:
watch: {
    'demo.child': {
        handler: function (val) {
            console.log(val)
        },
        deep: true
    },
    // 或者
    'demo.name' (val) {
        console.log(val)
    }
}
myVue.demo.name = '王二'  //王二
myVue.demo.age = '80' //{name:'李四',age:80}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值