element-ui的表单重置方法resetFields()的坑,及简单解决。
其实之前就知道这个坑,网上其他人也说过。
然后我勉强处理了一下。
然后又制造了新的坑。
这里记录一下。
坑的产生
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的输入框时,又触发了值的绑定。
入坑需谨慎,且行且珍惜。不知大家有什么好的解决方法.............
更多推荐
所有评论(0)