解决Vue中Element resetFields()重置表单不生效的问题(含Cannot read property ‘resetFields‘ of undefined问题解决)

问题背景:

在已经遵照Element官网给出的 resetFields 使用方法情况下,resetFields 方法仍无法生效

首先先来梳理一下Element官方文档中给出的 resetFields 方法的使用条件:

 

也就是说,想要使用 resetFields 需要满足:

  1. 给el-form-item添加 prop 属性
  2. 为了重置表单需要添加 ref 属性,ref属性需要与$ref['form']中名称一致

原始代码:

 

 按如上代码,我既添加了ref又添加了prop而且我的对话框模块的代码并没有进行复用,如果 resetFields() 方法生效后应该会将表单中的值重置为图三所设置的初始值,但是结果并没有重置...(我emo了....)

解决方法:

于是我思来想去决定把这个监听事件换个地方绑定

我将这个监听事件绑定到了准备开始弹出弹框的地方

虽然表单可以实现重置了,不过浏览器弹出了以下错误:

Cannot read property ‘resetFields‘ of undefined

 分析(一定要接着看更新的方法!):

undefined 表示一个变量未定义或未赋值的初始状态值,我认为弹出这个错误大概是因为第一次点击弹框的时候弹框内本来就是初始值,并不需要 reset,所以可以在使用 resetFields 之前增加一个判断条件,代码如下:

 最后,果然不报错了!!而且重置表单也可以正常生效了!!!

所以如果有和我情况一致的uu也可以试试我这种方法噢


更新

上次分析的 resetFields() 方法失效的原因不正确,真正让它 undefined 原因应该是在 mounted 加载完后,这个隐藏的对话框并没有被渲染到DOM树中,所以点击它的时候 $refs 获取不到dom节点,导致结果undefined,破案了破案了

解决方法:

1.依旧可以像上面一样换个地方绑定并添加一个判断条件,

2.也可以使用 nextTick() 方法:

简单理解 nextTick() 就是 当数据更新了,在dom中渲染后,自动执行该函数

  • 36
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值