vue中动态向对象中添加属性

写项目时遇到一个问题
向后端发送post请求,需要新增数据时,向后端传递的参数形式是这样的:
在这里插入图片描述
关于这里面的nodes,后端接收的需要是键值对的形式:
请添加图片描述
nodes里面的内容,左边是另一个数组中每个元素的id,右边是该元素另一个属性的属性值。
在这里插入图片描述
如图所示,左边的值是图中array数组中的id的值,右边是对应的moneyNum的值,将这两个属性从这个数组中提取出来,然后添加到一个新的对象中,传给后端。
代码:

data() {
	return {
	    // 定义一下这个对象的结构
		rewardPlan: {
                1: 20
            }
	}
},
methods: {
	// 处理数据
        changeSendData() {
            var array = this.multipleSelection;
            console.log(array, 'array');
            // 遍历array数组
            for (let i = 0; i < array.length; i++) {
                this.rewardPlan = { 1: 10 }; // 初始化rewardPlan对象
                this.$nextTick(() => {
                    this.$set(this.rewardPlan, array[i].id, Number(array[i].moneyNum)); // 将moneyNum转换为Number类型
                });
            }
            console.log(this.rewardPlan, 'rewardPlan');
        },
}

this.$set():

当给对象添加了一个属性,在控制台能打印出来,但是却没有更新视图时,就可以用this.$set()
官方解释:当vue的data里边声明或者已经赋值过的对象或者数组(数组里边的值是对象)时,向对象中添加新的属性,如果更新此属性的值,是不会更新视图的。向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发新视图更新。this.$set()必须用于向响应式对象上添加新属性,因为Vue无法探测普通的新增属性(比如:this.myObject.newProperty = ‘hello’)。
this.$set(target, key, value)
target: 要更改的数据源(可以使对象或者数组)
key: 要更改的属性
value: 赋给该属性的值

可以拿到rewardPlan:
在这里插入图片描述
再给剩下的两个属性赋值:

            const param = {
                name: this.ruleForm.planName,
                nodes: this.rewardPlan,
                recProId: this.processId
            };
            console.log(param, 'param');

参数格式正确,请求发送成功
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐