【解决】element表单动态添加或更新表单项,回显后无法修改或提示为空的问题

原创
2024/01/25 17:07
阅读数 87

原方法 

/**
  * 动态更新form
  * @param form
  */
updateForm(form) {
  this.form.manholeId = form.manholeId;
  this.form.manholeName = form.manholeName;
},

调整为

/**
 * 动态更新form
 * @param form
 */
updateForm(form) {
  this.$set(this.form, "manholeId", form.manholeId);
  this.$set(this.form, "manholeName", form.manholeName);
},

this.$set 详解

this.$set 是Vue中的一个实例方法,用于在响应式对象上设置新的属性或修改已有的属性,并确保这些属性也是响应式的。

使用 this.$set 可以解决Vue响应式系统的一个限制,即无法检测到通过索引直接设置数组元素或通过Object.defineProperty添加的属性的变化,所以通过this.$set 方法,可以显式地告诉Vue,某个属性的值已经发生了变化,从而触发视图的更新。

一、对象 使用this.$set(),修改和新增

// 定义数据对象:
obj: { name: "小明", age: 18, },        
 
// 基本语法:
this.$set(需要改变的对象,"需要改变的对象属性","新值")
 

1、对象修改

this.$set(this.obj, "name", "小刘"); 
 
控制台输出:obj: { name: "小刘", age: 18, },

2、对象新增

this.$set(this.obj, "hobby", "study");
 
控制台输出:obj: { name: "小明", age: 18, hobby: "study"},  

3、对象新增未知属性(这里的item是传递的参数,不带引号,"reading"是参数值)

this.$set(this.obj, item, "reading");

二、数组 使用this.$set(),修改和新增

// 定义数组包对象:
arr: [                                           
  { name: "小王", age: 18 },
  { name: "小张", age: 20 },
 ],
 
// 定义普通数组:       
twoArr: [11, 22, 33, ],                          
 
// 基本语法:
this.$set(需要修改的数组,需要修改的数组下标,{ "要修改的数组对象,一个/多个" })
 

1、数组修改

// 修改数组对象:
this.$set(this.arr, 1, { name: "小王", age: 19 });
          
控制台输出:arr: [ { name: "小王", age: 18 },{ name: "小王", age: 19 }, ],
// 修改普通数组:
this.$set(this.twoArr, 0, 99);    
   
控制台输出:twoArr: [99, 22, 33, ],   

2、数组新增

(1)首先需要获取新增的数组长度:

let reslg = this.arr.length;  

(2)然后添加在数组末尾:

this.$set(this.arr, reslg,{ name: "小紫", age: 18 },);
 
控制台输出:
arr: [ 
        { name: "小王", age: 18 },
        { name: "小张", age: 20 },
        { name: "小紫", age: 18 },
     ],

三、同理,执行删除操作时,对象或数组不更新时可以使用this.$delete

// 基本语法:
 
this.$delete(this.obj, "name")

参考

深入响应式原理:https://v2.cn.vuejs.org/v2/guide/reactivity.html

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部