关于element表单重置resetFields()不生效问题

当在Element UI的Dialog弹框中使用表单时,遇到resetFields()无法清除表单数据的问题。问题源于在form mounted后给表单赋值,导致resetFields()无效。解决方法是确保在mounted之后再进行赋值操作,通过改变赋值时机来确保resetFields()能够生效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

使用element对话框Dialog,添加编辑使用一个弹出框时,发现使用表单重置方法resetFields()不生效,也就是点击编辑之后关闭弹框,再点击添加,此时弹出框表单仍然保留编辑项的内容而不是全新的空表单。

弹框的@close='resetForm'关闭事件绑定了重置表单以及表单验证的方法

resetForm(){
      //重置表单
      this.$refs.form.resetFields();
      //重置表单验证
      this.$refs.form.clearValidate();
},

再三检查表单绑定:model="form",ref="form",item绑定的prop="name",以及输入框绑定的v-model="form.name"都是没有问题的,

在这种情况下,resetFields()方法依然不生效

产生原因(此处转载大佬文章,正在努力研究中)

1.此方法用于将form表单的数据设置为初始值
2.而这个初始值是在form mounted生命周期被赋值上去的
3.所以,在 form mounted之前,如果给form表单赋值了,那么后面调用resetFields()都是无效的,因为form表单的初始值已经在 mounted 之前就被赋值了

解决办法

在点击编辑赋值的时候使用 this.$nextTick(function(){})方法,即可以实现在 mounted 之后再进行赋值操作,此时resetFields()就起作用了

修改之前代码

this.dialogFormVisible=true;
this.formTitle=`编辑「${row.name}」模块`;
form.name=row.name;
form.url=row.url;

修改之后代码

this.dialogFormVisible=true;
this.$nextTick(function(){
      this.formTitle=`编辑「${row.name}」模块`;
      form.name=row.name;
      form.url=row.url;
})
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值