element - - - - - Form表单的resetFields()方法没有生效?

文章讨论了在使用ElementUI组件库的Form表单时遇到的resetFields方法不工作的问题。问题出现在当在Dialog中编辑表格行数据并尝试重置表单时,由于初始化值被回显数据覆盖,导致表单未重置。解决办法是通过异步赋值,如$nextTick,确保在Dialog渲染完成后再设置回显数据。

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

万事如伊 大吉大利

Form表单的resetFields方法没有生效?

关于element组件,相信各位同学都不陌生。其各个组件不可谓不好用,能够快速的帮助开发人员进行排版布局&实现效果。

但是总会遇到一些不可避免的坑。

1. 场景描述

在table的行内,有一个编辑功能。点击时会将行内数据塞入form绑定的对象内,然后打开dialog展示form的数据。

代码展示:

editRow(row){
	this.ruleForm = {
		...row
	};
	this.dialogVisible = true;
}

弹窗展示正常。
修改form表单值正常。
提交数据正常。
提交之后重置表单数据异常!

2. 问题分析

重置表单的操作如下:

 this.$ref['ruleForm'].resetFields();

可以确定的是表单绑定的ref就是ruleForm。之前用的都是好好的,为什么这次就出现问题了呢?

仔细查看element文档之后,发现了端倪
在这里插入图片描述

请注意官方给出的说明:
对整个表单进行重置,将所有字段值重置为初始值并移除校验结果

所以不是重置为不是空值!!!

当我们第一次打开Dialog,紧接着设置回显,因为Dialog还没执行完毕,这时form的初始值会被设置为回显的值,所以在调用this.$ref[‘form’] .resetFields()时form看起来没有重置。

3. 解决办法

既然已经找到原因,针对性解决问题即可。在打开弹窗的时候,不要直接赋值,可异步赋值,setTimeout或者this.$nextTick均可。
代码如下:

editRow(row){
	this.dialogVisible = true;
	
     // 设置回显数据
     this.$nextTick(function() {
       this.ruleForm = {
         ...row,
       };
     });
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值