Vuelidate排查故障时如何查看所有验证错误信息
排查方案
直接在this.$v.$touch()执行后新增校验错误打印逻辑即可,不同Vuelidate版本对应代码如下:
Vuelidate 2.x 版本(带$errors内置属性)
async SUBMIT() { this.$v.$touch(); // 新增错误打印逻辑 const logErrors = (vInstance, path = '') => { if (vInstance.$errors.length) { console.log(`错误路径:${path || '根校验节点'}`, vInstance.$errors.map(err => ({ 字段名: err.$propertyPath, 触发规则: err.$validator, 错误提示: err.$message, 字段当前值: err.$model }))) } // 递归遍历子字段校验状态 Object.keys(vInstance).forEach(key => { if (!key.startsWith('$') && typeof vInstance[key] === 'object' && vInstance[key]) { logErrors(vInstance[key], path ? `${path}.${key}` : key) } }) } logErrors(this.$v) if (this.$v.$invalid) { return; } // 原有提交逻辑 }
执行后打开浏览器控制台,就能直接看到所有未通过校验的字段、对应规则、当前值,快速定位问题。
Vuelidate 0.x 旧版本
如果是老版本没有$errors属性,用下面的简化逻辑即可:
async SUBMIT() { this.$v.$touch(); // 打印所有无效字段 const findInvalid = (v, prefix = '') => { Object.keys(v).forEach(k => { if (k.startsWith('$')) return if (v[k].$invalid) { console.log(`无效字段:${prefix}${k}`, v[k]) findInvalid(v[k], `${prefix}${k}.`) } }) } findInvalid(this.$v) if (this.$v.$invalid) { return; } // 原有提交逻辑 }
常见问题排查方向
- 校验规则定义时漏覆盖嵌套字段
- 字段默认值不符合校验规则(比如必填字段默认值为undefined)
- 自定义校验规则返回值逻辑错误
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

