常规情况下我们在vue实例的data中设置响应数据。但当数据为对象,我们增加或删除对象属性值时,视图并不触发更新.
vue的文档里说的很清楚,这些会触发更新
但是:
1.当你利用索引直接设置一个项时
2.当你修改数组的长度时
都不会触发视图更新
现在你可以用下面的方法设置
方案一:利用Vue.set(object,key,val)
例:Vue.set(vm.obj,‘k1’,‘v1’)
方案二:利用this.
s
e
t
(
t
h
i
s
.
o
b
j
,
k
e
y
,
v
a
l
)
例
:
t
h
i
s
.
set(this.obj,key,val) 例:this.
set(this.obj,key,val)例:this.set(this.obj,‘k1’,‘v1’)
如果上面的方法都不行的话:
方案三:就利用Object.assign({},this.obj)创建新对象
如果是数组 就Object.assign([],this.obj)
如果是对象 就Object.assign({},this.obj)
this.obj.k1='v1';
this.obj = Object.assign({}, this.obj)
或
this.obj = Object.assign({}, this.obj,{'k1','v1'})
方案四:使用…方法
如果是数组或对象就
this.obj = [...this.obj]
或
this.obj = {...this.obj}