vue 向对象中添加未在data中声明的属性

2020-06-14  本文已影响0人  前端_Fn

受现代 JavaScript 的限制 (而且 Object.observe 也已经被废弃),Vue 无法检测到对象属性的添加或删除。例如:

new Vue({
    data: {
        return {
            user: {
                  username: 'fred',
                  age: 20
            }
        }
    },
    created(){
       this.getData();
    },
    methods: {
        getData(){
            this.user.habby = {
                one: '游泳',
                two: '朗诵'
            }
        }
    }
});

当我们去操作数据发生改变的时候,视图是并不会发送变化的,因为 Vue 会在初始化实例时对属性执行 getter/setter 转化后对数据进行一个实时追踪,所以属性必须在 data 对象上存在才能让 Vue 将它转换为响应式的

对于已经创建的实例,Vue 不允许动态添加根级别的响应式属性

如何将 data 属性转换为响应式的?

new Vue({
    data: {
        return {
            user: {
                  username: 'fred',
                  age: 20
            }
        }
    },
    created(){
       this.getData();
    },
    methods: {
        getData(){
            this.$set(this.user, 'habby', {
                one: '游泳',
                two: '朗诵'
            })
        }
    }
});

这样, data 对象上存在才能让 Vue 将它转换为响应式的。关于具体的 Vue 响应式,MVVM架构,欢迎阅读我的另一篇:《MVC 和 MVVM 架构模式/设计思想》

上一篇下一篇

猜你喜欢

热点阅读