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

然后我勉强处理了一下。

然后又制造了新的坑。

这里记录一下。

坑的产生

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的输入框时,又触发了值的绑定。

 

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

 

 

 

 

GitHub 加速计划 / eleme / element
54.06 K
14.63 K
下载
A Vue.js 2.0 UI Toolkit for Web
最近提交(Master分支:3 个月前 )
c345bb45 7 个月前
a07f3a59 * Update transition.md * Update table.md * Update transition.md * Update table.md * Update transition.md * Update table.md * Update table.md * Update transition.md * Update popover.md 7 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐