注意此处说明:对该表单项进行重置,将其值重置为初始值并移除校验结果
在页面第一次加载时点击新增,进行关闭时,resetFiles 可以触发没有问题,包括后续编辑关闭也可以对表单重置成功。
但是在页面第一次加载时点击编辑,在进行关闭操作时,出现问题,表单没有被清空。
是因为此方法不是清空表单,注意上边的说明,此方法会将其值重置为初始值并移除校验结果
要解决很简单,在编辑方法中,为赋值操作加上 $nextTick 边可以解决了。
edit(row) {
this.editVisibile = true
this.$nextTick(() => {
this.form = { ... row }
})
}
如果要究其原因的话,可以接着往下看看
当页面第一次加载时,表单为空,如果第一次点击的是新增,那么form表单会与数据进行双向绑定,并且深拷贝一份初始数据存起来,当使用 resetFiles 时,再将一开始深拷贝的数据拿来进行赋值。
那么编辑时为什么会出现 resetFiles 失效的问题呢? 其实并没有失效,只是此时的初始值已经是第一次编辑的那条数据。包括后续点击其他数据进行编辑,关闭之后,表单都会重置为第一次点击的那条数据。
原因就是DOM渲染时异步任务,赋值为同步代码,所以赋值在DOM渲染之前,所以form表单与数据进行双向绑定的时候,深拷贝的其实是点击编辑时候赋值的那一条数据,那么再之后的所有关闭操作中,都会得到第一次点击编辑时的那条数据被初始化到表单中。
使用 nextTick 的定义为:在最近一次DOM渲染完成之后执行。所以将赋值操作放在 $nextTick 中 ,赋值操作就会在DOM渲染之后执行,form就会拿到一开始未赋值的数据作为重置内容进行深拷贝保存,为之后重置使用。