Vuetify v-form执行validate方法后formOk仍为false如何解决
问题根因
Vuetify的v-form默认会对所有绑定了rules属性的表单项执行校验,即使字段处于禁用状态、错误提示被禁用逻辑隐藏,只要规则校验不通过,仍然会被计入表单整体校验结果,导致v-model绑定的formOk始终为false。你遇到的带persistent hint的禁用字段刚好符合这类场景:字段禁用后错误提示不展示,但规则校验逻辑仍在运行,产生了看不到的校验错误。
解决方案
你可以根据自己的业务场景选择以下任意一种方案修复:
- 动态绑定禁用字段的校验规则
对所有设置了persistent hint的禁用字段,将固定的rules改为动态绑定,字段禁用时直接返回空规则数组,从根源上避免触发无效校验:
示例写法::rules="isDisabled ? [] : yourCheckRules()" - 给禁用字段添加
lazy-validation属性
给这类禁用的表单项添加lazy-validation属性后,只有用户主动和字段交互过才会触发校验,从未被操作过的禁用字段不会执行校验,也就不会产生隐藏的错误记录。 - 手动同步表单校验状态
如果不想修改表单项的原有配置,可以在调用校验方法后,手动将返回的校验结果赋值给formOk:// validate方法返回Promise,需在回调中取值 this.$refs.form.validate().then(isValid => { this.formOk = isValid }) - 重置表单状态
如果是提交完成后需要恢复表单初始状态,可以直接调用this.$refs.form.reset(),该方法会清空所有历史校验记录,同时将formOk重置为初始的true值。
内容的提问来源于stack exchange,提问作者loreeemartiii
相关产品推荐
相关产品推荐

