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();
|