项目场景:
最近在写一个vue3项目,因为开发习惯喜欢把新增编辑模块封装成单独组件。
问题描述
本来也没啥问题的,但是有个表单赋值回显时需要往组装数据,结果就正好发现了这个奇怪的bug,表单对象里某个数组属性第二次打开莫名其妙多一条数据。正常赋值不会暴露这个问题,因为我每次打开表单往数组属性里push对象才暴露出来。
原因分析:
反复看了自己写的代码,看上去没啥问题,每次关闭表单时手动清楚了表单数据又用到element提供的清空表单方法,最后只能打断点一点点排除,发现数据到element提供的清空表单方法调用后又回到赋值时的状态。
解决方案:
问题找到了,原来是resetFields重置的数据是以el-form初次渲染时绑定的model为准,当你第一次打开弹窗时el-form才渲染,而此时已经赋值formData了,所以每次resetFields的数据就是第一次赋值formData的数据。所以你得在打开弹窗后在nextTick里赋值,所以需要在赋值之前增加nextTick;
const editRow = (row: hostelObj) => {
nextTick(() => {
....
});
};