只验证检查1规则



我有一个巨大的输入表单,需要用数据填充,并能够保存进度,以便以后完成表单,但只有当表单适合1个自定义规则时:

  • 表单能够被保存,当它不包含任何禁止的词(我们假设禁止的词是[TEST1, TEST2])

这意味着例如我有这样的验证规则:

validations: {
A: {
required,
$each: {
Aa: { required },
Ab: { required, dontHaveForbiddenWords },
Ac: { required, dontHaveForbiddenWords }
},
},
B: {
required,
Ba: { required, dontHaveForbiddenWords },
Bb: { required },
}
// ... a lot of additional fields
}

在这种情况下,我希望表单能够在所有字段为空时保存(因为它不包含禁用词)即使它有未填充的必需字段。

问题是,由于required规则,表单具有$invalid状态,我不知道如何绕过它。

更新:这个答案不起作用,这是我的侥幸和糟糕的测试,我设置为条件检查的标志不在this.$v.$touch()上重新应用,并始终保持默认值

作为@EstusFlask建议我已经创建了一个自定义验证器,所以我可以在某些情况下关闭它,它使用顶级变量而不是参数,因为我想一次否决所有字段的验证器,也在我的项目中,我有条件required validators,我发现没有创建一个更好的解决方案,如果你会编辑我的解决方案,我会很高兴:

import { helpers } from 'vuelidate/lib/validators';
let isRequired = true;
const customRequiredValidator = (value) => {
return isRequired ? helpers.req(value) : true;
}
在后面的代码中,我有2个处理程序:
  • onSave(),我把required规则关闭
  • onSumbit()在那里我设置required规则返回ON

像这样

onSave() {
isRequired = false;
if (this.$v.$invalid) {
isRequired = true;
// show alert
return;
}
isRequired = true;
// save form progress
}
// isRequired is always true after onSave
onSubmit() {
this.$v.$touch(); // to trigger the validation
if (this.$v.$invalid) return; // show alert
// sumbit the form
}

有效的解决方案是使用JSON.stringify()

我的团队将其与字符串化validationState配对,并在包含validationRule名称的regex字符串上测试它,在我的情况下是dontHaveForbiddenWords,并检查false值,这意味着至少一个规则在整个表单上失败:

hasForbiddenCharacters() {
const validationStateString = JSON.stringify(this.$v.currentOffer, null, 0)
const hasForbiddenCharacters = /"dontHaveForbiddenWords":false/.test(validationStateString)
return hasForbiddenCharacters;
}

相关内容

  • 没有找到相关文章

最新更新