TDesign Dialog 关闭后怎么清除表单数据?
我在用 TDesign 的 Dialog 组件做编辑弹窗,里面有个表单。现在问题是,关闭对话框后再打开,表单里还留着上次的数据,这肯定不行啊。
我试过在 on-close 里手动清空数据,但好像时机不对,有时候没生效。是不是应该用别的生命周期?或者 TDesign 有自带的清除机制?
这是我的 Dialog 用法:
<t-dialog v-model:visible="showDialog" @close="handleClose">
<t-form :data="formData">
<t-form-item label="名称">
<t-input v-model="formData.name" />
</t-form-item>
</t-form>
</t-dialog>
然后 handleClose 里就写了 formData = { name: '' },但有时候还是残留旧值,到底该咋整?
on-close里手动清空数据,理论上是对的,但可能因为组件的生命周期或者其他原因导致没有及时生效。你可以试试在on-close钩子函数里用个nextTick来确保 DOM 更新完成后再清空数据。Vue 的
nextTick是个好东西,可以确保在 DOM 更新之后执行回调,这样可以避免一些因为异步更新导致的问题。你可以试试下面这个方法:这段代码的意思就是,当
handleClose被调用时,先不急着清空数据,等 Vue 完成当前的 DOM 更新操作之后再执行清空数据的操作。这样应该能解决数据残留的问题。如果
nextTick还是不行的话,可能需要检查一下showDialog的状态变化和formData的绑定逻辑,确保它们之间的关系是正确的。有时候 Vue 的响应式系统会有点 tricky,多打印点日志调试一下也能找出问题所在。希望这个方法能帮到你,如果还有问题再折腾折腾。
formData = { name: '' }这样赋值会丢失响应性,应该用 Object.assign 或者分开属性赋值。代码给你:
如果还不行,可以在dialog的visible变化时处理,这样更稳:
实测这些方法都能清干净,看你自己习惯用哪个。我一般用watch方案,不容易漏掉各种关闭场景。