1、背景
使用表单验证时,如果有多个模块需要切换,每个模块下的元素都使用了validate进行验证,模块之间切换时,使用 v-if 、v-else 的方式就会导致标题上面的错误
2、解决办法
-
方法一:使用v-show切换
使用v-show,通过改变元素的 css 属性(display)来决定元素是显示还是隐藏,节点仍能找到,上述报错不会再出现
但是会导致另一个问题:提交时,节点仍存在,则会启动里面验证,并且会看到一个错误,提示我尚未完成所有必填字段,无法提交,不符合需求
-
方法二:保留v-if,给每个模块下的校验元素一个独特的key值
该问题是由于 vue.js 使用的 "就地补丁"策略而出现的,只要通过对每个输入的元素的key值设置唯一值就可以解决这个问题。方法亲测有效
// eg <form-input key="unique" validate='xxxx'></form-input>
方法三:网上也有说添加指令 .persist 有效,但我试了,仍报错
参考资料:
1、https://stackoverflow.com/questions/57651519/vee-validate-validating-a-non-existing-field