vue修改对象的属性值后页面不重新渲染问题
解决方法用$.set用Object.assignvue双向绑定原理Vue采用数据劫持结合发布者-订阅者模式的方法,通过Object.defineProperty()来劫持各个属性的setter,getter属性,在数据变动话,通知订阅者,触发更新回调函数,重新渲染视图。vue数据vue中data中定义的数据,都被赋予了getter和setter,当你要给对象添加新的属性的时候,或者你在其他地方直接
·
解决方法
- 用$.set
- 用Object.assign
vue双向绑定原理
Vue采用数据劫持结合发布者-订阅者模式的方法,通过Object.defineProperty()来劫持各个属性的setter,getter属性,在数据变动话,通知订阅者,触发更新回调函数,重新渲染视图。
vue数据
vue中data中定义的数据,都被赋予了getter和setter,当你要给对象添加新的属性的时候,或者你在其他地方直接this.出来的变量,是没有getter和setter属性的。
(当你把一个普通的 JavaScript 对象传入 Vue 实例作为 data 选项,Vue 将遍历此对象所有的属性,并使用 Object.defineProperty 把这些属性全部转为 getter/setter。受现代 JavaScript 的限制 (以及废弃 Object.observe),Vue 不能检测到对象属性的添加或删除。由于 Vue 会在初始化实例时对属性执行 getter/setter 转化过程,所以属性必须在 data 对象上存在才能让 Vue 转换它,这样才能让它是响应的。
)
解决办法
<div>{{data.a}}{{data.b}}{{data.c}}</div>
export default {
name: "addEdit",
data() {
return {
data: {
a: 1
}
}
},
mounted(){
this.data = Object.assign({},this.data,{ b: '哈哈哈'});
//数据层次太多的时候,可以手动调用,触发render函数进行自动更新
this.$forceUpdate();
this.$set(this.data,'c','呼呼呼');
}
}
更多推荐
已为社区贡献16条内容
所有评论(0)