Vue中给对象新增属性——vue.$set()

一、问题

在开发过程中,经常遇到这样的情况:当data里边已经声明或赋值过对象或者数组(数组里边的值是对象)时,再向对象中添加新的属性,如果更新此属性的值,是不会更新视图的。
根据官方文档定义:如果在实例创建之后添加新的属性到实例上,它不会触发视图更新。

  • 当你把一个普通的js对象传入Vue实例作为data选项,vue将遍历此对象所有的属性,并使用Object.defineProperty把这些属性全部转为getter/setter。
    受现代js的限制,vue不能检测到对象属性的添加或删除。由于Vue会在初始化实例时对属性执行getter/setter转化过程,所以属性必须在data对象上存在才能让vue转换它,这样才能让它是响应的。
    举个例子:
data () {
    return {
        student: {
            name: '',
            age: ''
        }
    }
},
mounted () {
    this.student.age = 24
}
众所周知,直接给student赋值操作,虽然可以新增属性,但是不会触发视图( 页面 )
更新原因是:vue.js的属性必须在 data 对象上才能让 Vue.js 转换它,才能让它是响应的。

二、解决方法

vue.$set(obj,key,value)
举例:

mounted () {
    this.$set(this.student,"age", 24)
}
第一个参数:改变的对象
第二个参数:改变的对象中的属性
第三个参数:改变的属性值
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容