vue将对象新增的属性添加到检测序列

2 篇文章 0 订阅

vue中将对象中新增的属性增加到检测序列中

deepCopy(o1, o2) { // 将o2的内容拷贝给data中的o1
            var key, i
            if (o2 instanceof Array) {
                for (i = 0; i < o2.length; i++) {
                    if (o2[i] instanceof Array) {
                        this.$set(o1, i, [])
                        this.deepCopy(o1[i], o2[i])
                    }
                    else if (o2[i] instanceof Object) {
                        this.$set(o1, i, {})
                        this.deepCopy(o1[i], o2[i])
                    }
                    else {
                        this.$set(o1, i, o2[i])
                    }
                }
            }
            else if (o2 instanceof Object) {
                for (key in o2) {
                    if (o2[key] instanceof Array) {
                        this.$set(o1, key, [])
                        this.deepCopy(o1[key], o2[key])
                    }
                    else if (o2[key] instanceof Object) {
                        this.$set(o1, key, {})
                        this.deepCopy(o1[key], o2[key])
                    }
                    else {
                        this.$set(o1, key, o2[key])
                    }
                }
            }
            else {
                o1 = o2
            }
}

  • 由于 Vue 不允许动态添加根级响应式属性,所以你必须在初始化实例前声明根级响应式属性,哪怕只是一个空值

  • 如果一个属性没有事先声明,后面再增加,他不能检测到变化,对于一些固定的结构,是可以检测到变化的。比如我知道一个obj里面必然有key1、key2属性,我可以事先初始化。如果这些东西是动态的,我没法事先声明。后面再增加,vue没法检测到变化了。

  • 这时将你已经在data中声明的变量和你要赋给这个变量的值作为参数传进该函数就行了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值