const app = new Vue({
el:"#app",
data:()=>{
item:{
oldProperty:"旧属性"
}
},
methods:{
addProperty(){
this.items.newProperty = "新属性" // 为items添加新属性
console.log(this.items) // 输出带有newProperty的items
}
}
})
点击按钮,发现结果不及预期,数据虽然更新了( console 打印出了新属性),但⻚⾯并没有更新
问题:vue2 是⽤过 Object.defineProperty 实现数据响应式,
原因是⼀开始 obj 的 默认数据的 属性被设成了响应式数据,⽽ 后⾯新增的属性,并没有通过 Obje
ct.defineProperty 设置成响应式数据
解决⽅案:
如果为对象添加少量的新属性,可以直接采⽤ Vue.set()
如果需要为新对象添加⼤量的新属性,则通过 Object.assign() 创建新对象
如果你实在不知道怎么操作时,可采取 $forceUpdate() 进⾏强制刷新 (不建议)