vue中动态向对象中添加属性
vue中动态向对象中添加属性写项目时遇到一个问题向后端发送post请求,需要新增数据时,向后端传递的参数形式是这样的:关于这里面的nodes,后端接收的需要是键值对的形式:nodes里面的内容,左边是另一个数组中每个元素的id,右边是该元素另一个属性的属性值。如图所示,左边的值是图中array数组中的id的值,右边是对应的moneyNum的值,将这两个属性从这个数组中提取出来,然后添加到一个新的对
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');
参数格式正确,请求发送成功
更多推荐
所有评论(0)