场景:新增弹层
和编辑弹层
共用一个组件,其中有select
需要做必填校验,select
的必填触发规则是change
。
当第一次打开的是新增弹层
时,一切安好。
若是先打开编辑弹层
,再打开新增弹层
,新增弹层
就会自动触发select
的校验规则。
以上显然不符合需求。
为了取消el-select
的自动校验,我尝试了更换select
的校验触发方式为blur
,但是会带来一个新的问题——先点击确定触发校验,再选择select
,校验提示不会消失。
所以,显然更换blur
并不符合需求。
检索了其他回答,均无用。
我猜测产生该问题的原因是:在关闭弹层事件中,我做了resetfileds
和clearfileds
,resetfileds
置空form表单,其实本质上也是一种改变select
的操作,故而触发了select
的change
事件,在第二次打开新增弹层
时,select
的值为''
,所以才会触发表单校验规则。
因此,我在el-dialog
上面加了销毁属性
,当dialog
关闭后,整个组件就被销毁,打开新增弹层
时已经是一个新dom,就不会出现bug了。
解决方案: :destory-on-close="true"
<el-dialog
v-model="dialogVisible"
title="Tips"
width="30%"
:destory-on-close="true"
:before-close="handleClose"
>
</el-dialog>
`