我是靠谱客的博主 心灵美小白菜,最近开发中收集的这篇文章主要介绍VUE动态追加对象的属性及属性值,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

这两在做组件的封装,在拆分组件时,遇到一个问题:给对象动态追加属性及对应的属性值,遇到的几种情况。
情况1:给对象追加明确的属性和属性值
昨天是在GET请求前,给请求的参数data对象动态设置属性,代码如下:

<template>
    <div class="list">
        显示对象testObj:{{testObj}}
    </div>
</template>
<script>  
export default {
    name:'list',
    data(){
        return{    testObj:{}  }
    },
    created(){ this.changObj1("name","hao"); },
    mounted(){},
    methods: {
        // 传参数形式给对象追加属性name,值为hao
        changObj1:function(key,val){
            this.testObj[key]=val;
            this.testObj.key=val;
        }
    }
}
</script>

输出结果为:
显示对象testObj:{ “name”: “hao”, “key”: “hao” }
按预期的输出,没有问题。

情况二:for循环动态追加属性和属性值变量
for循环动态追加,发现循环时,this.testObj.keyName方法只追加到数组的最后一个属性及属性值,代码如下:

methods: {
        // 变量形式给对象testObj追加属性及属性值
        changObj1:function(){
            let keyName='';
            for(let i=0;i<5;i++){
                //对象属性名称为key1到key9
                keyName="key"+i;
                //keyName为属性名称,i为属性值
                
                this.testObj.keyName=i;  
                //输出结果:{ "keyName": 4 }
                
                this.testObj[keyName]=i;  
                //输出结果:{ "key0": 0, "key1": 1, "key2": 2, "key3": 3, "key4": 4 }
            }
        }
}

从输出结果,我们能看到,点属性赋值的方式不对,应该采用:this.对象名称【属性名称】=属性值

情况三:GET/POST请求后,动态追加属性和属性值
但是,今天我在GET请求成功后,将请求到的数组追加给对象使用同样的方式,使用了“this.对象名称【属性名称】=属性值”方式,发现结果输出为underfined,百度了一下,发现原因:在该数据发生更新时,vue无法检测到数据变化。这就说明以上两种方式都不对,更换代码:

    methods: {
        // 变量形式给对象testObj追加属性及属性值
        changObj1:function(){
            let keyName='';
            for(let i=0;i<5;i++){
                //对象属性名称为key1到key9
                keyName="key"+i;
                this.$set(this.testObj,keyName,i);  
            }
        }
   }

显示对象testObj:{ “key0”: 0, “key1”: 1, “key2”: 2, “key3”: 3, “key4”: 4 }

this.$set(对象名称,属性,属性值)

希望结果能帮到VUE的新手,同时,也希望前端大牛能详细说明一下原因~

最后

以上就是心灵美小白菜为你收集整理的VUE动态追加对象的属性及属性值的全部内容,希望文章能够帮你解决VUE动态追加对象的属性及属性值所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部