使用框架:element Plus + vue3
场景描述:
场景一: 表单的添加和修改功能,公用同一个弹框,点击修改后,点击添加表单显示的是上次修改的数据。 场景二: 点击修改,数据回显到表单,然后点击取消关闭弹框,在关闭的时候使用resetFields() 清空数据,第二次点击修改的时候,回显的数据可以清空,但是表单的值会默认到第一次回显的数据。而且点击添加的时候,默认展示的就是第一次回显的数据。
官方提供表单校验以及清除数据的方法
场景一问题解决:
element plus 的弹框有一个close 方法,这个方法为弹框关闭时触发,在这个close 方法内调用清空表单方法resetFields() ,清空表单校验以及初始化表单数据。
<el-dialog
:close-on-click-modal="false"
@close="closeGift(giftBoxRef)"
:title="!isUpdate ? '添加' : '修改'"
v-model="BoxShow" >
</el-dialog>
const closeGift = (formEl: FormInstance | undefined) => {
BoxShow.value = false;
if (!formEl) return;
formEl.resetFields();
};
场景二问题解决:
原因:在dialog 弹框打开的时候,form 表单的数据回显,这个时候表单的初始化数据其实是被回显的数据替换掉了,resetFields() 在清空数据的时候,会默认恢复数据到数据的初始值,如果第一次表单回显时初始化数据被替换,那么后续resetFields() 清空数据后恢复到的值会一直是第一次回显的值。
vue2 在vue2 中可以使用 this.$nextTick(() => {// 这里对表单进行赋值}) 的方法解决
const updateBox = async (row: any) => {
this.$nextTick(() => {
})
}
vue3 在vue3 中也可以使用nextTick 解决
import { nextTick } from "vue";
const updateBox = async (row: any) => {
nextTick(() => {
});
};
nextTick 是将回调推迟到下一个 DOM 更新周期之后执行。在更改了一些数据以等待 DOM 更新后立即使用它
|