关于el-dialog清空el-form表单的那些事

909 阅读1分钟

使用场景

表格中添加表单和编辑表单共同使用一个el-dialog组件,在@close事件中自定义了一个handleClose事件用于关闭弹窗和清空表单的数据与校验规则,代码如下

data() {
    return {
        dataForm: {} // 用于回显数据
    }
},

methods: {
    handleClose() {
        this.visible = false
        this.dataForm = {}
        // ...
    }
}

我直接把dataForm清空为空对象,这会导致一些问题: 1、首先,根据el-dialog源码,this.visible = false并没有销毁这个组件,而是通过v-show指令隐藏了这个组件而已

image.png 2、this.dataForm = {}重置为空对象,在没有刷新当前页面的情况下,再次打开el-dialog组件时并没有触发组件的生命周期钩子,打印dataForm数据,虽然有数据,但不是--响应式数据

清空之前的数据:(响应式对象)

image.png

清空之后再次回显数据:(普通对象)

image.png

综上所述,当你使用上面的那种方式去清空表单,当你再次打开el-dialog去编辑的时候会导致你无法输入

解决方法

使用v-if指令将el-dialog组件销毁。