Error: [vee-validate] Validating a non-existent field: "#35". Use "attach()" first.

1、背景

使用表单验证时,如果有多个模块需要切换,每个模块下的元素都使用了validate进行验证,模块之间切换时,使用 v-if 、v-else 的方式就会导致标题上面的错误

2、解决办法

  • 方法一:使用v-show切换

    使用v-show,通过改变元素的 css 属性(display)来决定元素是显示还是隐藏,节点仍能找到,上述报错不会再出现

    但是会导致另一个问题:提交时,节点仍存在,则会启动里面验证,并且会看到一个错误,提示我尚未完成所有必填字段,无法提交,不符合需求

  • 方法二:保留v-if,给每个模块下的校验元素一个独特的key值

    该问题是由于 vue.js 使用的 "就地补丁"策略而出现的,只要通过对每个输入的元素的key值设置唯一值就可以解决这个问题。方法亲测有效

    // eg
    
    
  • 方法三:网上也有说添加指令 .persist 有效,但我试了,仍报错

参考资料:

1、https://stackoverflow.com/questions/57651519/vee-validate-validating-a-non-existing-field

2、https://www.thinbug.com/q/54390378

3、https://github.com/logaretm/vee-validate/issues/1828

你可能感兴趣的:(Error: [vee-validate] Validating a non-existent field: "#35". Use "attach()" first.)