背景
当前开发的项目需要跳转的比较多,故而做了弹出框表单,开发过程中发现新增、编辑时,elementUI的表单重置方法不能重置表单,当第一次打开的为新增,编辑时可重置,当第一次打开为编辑时,再打开新增,表单内容为第一次打开编辑的内容,未将表单重置为我们期望的初始值。
解决思路
1、排查resetFields方法是否执行;
2、查看表单重置方法是什么时候执行的;
3、弄清楚表单重置的是什么时候的值;
步骤
1、查阅elementUI的文档发现,表单重置的为data中设置的初始值;
2、那我们就再编辑回填数据之前调用resetFields不就完美解决了嘛(机智如我)!
3、编辑时,直接调用编辑中的init方法,并在其中添加resetFields重置方法,发现第一次加载的时候报错,
说明再弹框显示时,表单实例还没加载完,不能调用resetFields方法;
4、既然还没有实例肯定不能用resetFields这个方法了, 那怎么办呢,我想到了setTimeout方法,将resetFields方法和表单回填的方法放到setTimeout中,果然能够重置了,如下:
setTimeout(() => {
// 重置表单
this.$refs.formNameAdd.resetFields();
// 给表单进行赋值
for (let h in this.flowAddForm) {
if (formList.hasOwnProperty(h)) {
this.flowAddForm[h] = formList[h];
}
}
}, 0);
5、当使用dialog时候,调用dialog中的方法也同样要放到setTimeout之中,不然也会报未定义的错误,如下:
// 调用弹出框中的init()方法
setTimeout(() => {
this.$refs.flowAddRef.init();
}, 0)
网友评论