VueJS父子组件属性同步
¶背景
为了解决ElementUI中Dialog+Form同时用于添加、修改操作时,Form中输入项值及检验状态滞留(显示的是上一次关闭Dialog前的值)的问题。
在父组件中对Table行数据进行添加
、修改
操作,使用了ElementUI的Dialog组件,添加
、修改
操作使用同一Dialog表单。那么问题来了,点击添加
按钮时,对话框表单输入项初始化状态都应置空;点击修改
按钮对话框表单输入项应初始化为当前行的值;另外,我给表单加了ElementUI自带的输入校验。
Dialog关闭时,仅设置了display:none
属性。每次Dialog显示时都会遗留上一次关闭之前的值或者校验提示状态。虽然可以在代码中显示重置表单各项数据,以及通过this.$refs['form'].resetForm()
、this.$refs['form'].clearValidate()
重置表单校验状态,但是this.$refs['form'].resetForm()
重置后的表单值始终为第一次打开Dialog时的值。
¶解决方案
我将Dialog+表单封装为组件。在父组件中引用子组件时添加v-if
,在关闭Dialog时将子组件销毁。
¶核心代码
1 | <!-- 子组件Dialog关闭时向父组件发送事件 --> |
¶父组件
1 | <template> |
¶子组件
1 | <template> |