Vue.set()

Vue.set()

给对象新增属性

1
2
3
4
5
6
7
8
9
10
11
12
data () {
return {
student: {
name: '',
sex: ''
}
}
}

mounted () {
this.student.age = 24
}

直接给 student 赋值操作,虽然可以新增属性,但是不会触发视图更新

原因

受 ES5 的限制,Vue.js 不能检测到对象属性的添加或删除。因为 Vue.js 在初始化实例时将属性转为 getter/setter,所以属性必须在 data 对象上才能让 Vue.js 转换它,才能让它是响应的。

解决方案

Vue.set()/this.$set()

1
this.$set(object, key, value);

对象拷贝

1
2
3
mounted () {
this.student = Object.assign({},this.student,{age: 24})
}

补充(2021-12-21)

当数据多层级时,可以使用 this.$forceUpdate()强制更新

1
2
this.list[index].show = true;
this.$forceUpdate();