【vue开发】Object.defineproperty无法监听到新增的对象属性

vue2中使用中我们也会遇到这样的问题

# template
<p @click="adda(obj)">{{ obj.a }}</p>
<p @click="addb(obj)">{{ obj.b }}</p>

# srcript
data () {
    return {
        obj:{
            a:1
        }
    }
},
mounted () {
    this.obj.b = 1;
},
methods: {
    addb(item){
        item.b += 1;
        console.log(this.obj.b)
    },
    adda(item){
        item.a += 1;
    }
}

我们发现点击obj.a是响应式, 页面也会更新


而新增的obj.b点击则不会

因为vue2使用的Object.defineproperty无法监听到新增的对象属性

针对这个问题vue2提供了$set方法来解决

mounted () {
    this.$set(this.obj, "b", 1)
}
原文地址:https://www.cnblogs.com/xiaohuizhang/p/14516026.html