1. Vue.$set
Vue利用数据劫持实现了双向数据绑定,只要数据被修改就会反应到视图层,但看看以下示例:
// 省略无关部分代码
data () {
return {
user: {
name: 'zfs',
age: 25
}
}
},
methods: {
update () {
this.user = { name: 'borui' } // 视图层得到更新
this.user.height = 178 // 属性得到新增,但视图层没有更新
}
}
为什么会出现以上问题?因为受 ES5 的限制,Vue.js 不能检测到对象属性的添加或删除。因为 Vue.js 在初始化实例时将属性转为 getter/setter,所以属性必须在 data 对象上才能让 Vue.js 转换它,才能让它是响应的。
要处理这种情况,我们可以使用$set()
方法,既可以新增属性,又可以触发视图更新。
值得注意的是,$set
写法与普通的对象属性写法不太一致,常见错误写法 this.$set(key,value)
mounted () {
this.$set(this.user.height, 178)
}
正确写法应该是:** this.$set(this.data,”key”,value’)
**
mounted () {
this.$set(this.student, "height", 178)
}
网友评论