element-ui的表单重置方法resetFields()的坑,及简单解决。

7 篇文章 0 订阅
4 篇文章 0 订阅

 

其实之前就知道这个坑,网上其他人也说过。

然后我勉强处理了一下。

然后又制造了新的坑。

这里记录一下。

坑的产生

resetForm(formName) { this.$refs[formName].resetFields(); }

坑一:官方写法,api也没有说明。这些坑。

解决方法:多实践,官方写法仅供参考。

坑二:看这个写法知道  this.$refs 这个是必须dom渲染完成后。且表单需要有ref,formName的名字记得一致。

我没遇见过,因为我基本都是在渲染完成进行此方法

解决方法:

this.$nextTick(() => {
   this.$refs[formName].resetFields()
})

坑三: 需要完整 el-form及 form-item 组件中 且 配置 prop,不配置的执行此方法,该输入框值不会重置。

此为大坑

解决方法

1.要不你每个都加prop。

2.我的表单太多,每个都加得累死,还得维护。所以,

执行此方法前都加了

this[formName] = {};

最终

resetForm(formName) {
   this[formName] = {};

   this.$nextTick(() => {
    this.$refs[formName].resetFields()
   });
},

注意:此form的对象值清空又初始化。如果其他地方操作此对象内的值可能会有异常。此仅供参考。

自己的坑:然后我又画蛇添足。

在  resetFields()方法后又重新对form对象内的某些值进行初始化。

resetForm(formName) {
   this[formName] = {};

   this.$nextTick(() => {
    this.$refs[formName].resetFields();
   });

   this[formName].remark = "";
},

这个时候神奇的bug就出现了。

操作几次之后,输入框的值录入不进去,都是空的 ,然后再输入有prop的输入框,值又出来了。

猜测:值绑定延迟,导致值没有渲染上去。操作带有prop的输入框时,又触发了值的绑定。

 

入坑需谨慎,且行且珍惜。不知大家有什么好的解决方法.............

 

 

 

 

  • 22
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值