通过 Angular 6 将一个验证规则应用于所有字段的任何简单方法
Any simple way to apply one validation rule to all fields by Angular 6
考虑一个数据模型包含 20 个具有不同名称的字符串字段("name"、"address"、"company".. 等),映射到 Angular 前端为 20输入字段。现在,如果任何字段包含特殊字符,则要求验证阻止用户提交表单的每个字段。
我可以计算出正则表达式模式,但只是想知道对所有字段执行一个验证器的任何简单方法。
有一个简单的解决方案,例如只使用一个异步验证器。
例如,您可以将子表单中一个字段更改时我们应该验证的所有字段分组
然后对它们应用验证器。
示例:
this.mySubForm = this.fb.group({
field1: ['', [Validators.required]],
field2: ['', [Validators.required]],
...
field20: ['', [Validators.required]]
}, this.validatorAllFields.bind(this)
});
并以这种方式定义异步验证器:
validatorAllFields(control: FormGroup): any {
if (control) {
if(control.value.field1 don't contain special char … &&
control.value.field2 don't contain special char … &&
…
control.value.field20 don't contain special char &&)
//validation is ok in this case
return null;
else
//validation fails here...
return {'formInvalid': 'true'}
} else {
return null;
}
}
您可以在没有任何附加包的情况下执行此操作,并且它会起作用。
只需实现:每个控件没有任何特殊字符,例如,它应该是相同的功能。
您可以使用 formGroupName
作为子表单,如果您愿意,甚至可以避免使用子表单。
考虑一个数据模型包含 20 个具有不同名称的字符串字段("name"、"address"、"company".. 等),映射到 Angular 前端为 20输入字段。现在,如果任何字段包含特殊字符,则要求验证阻止用户提交表单的每个字段。
我可以计算出正则表达式模式,但只是想知道对所有字段执行一个验证器的任何简单方法。
有一个简单的解决方案,例如只使用一个异步验证器。
例如,您可以将子表单中一个字段更改时我们应该验证的所有字段分组 然后对它们应用验证器。
示例:
this.mySubForm = this.fb.group({
field1: ['', [Validators.required]],
field2: ['', [Validators.required]],
...
field20: ['', [Validators.required]]
}, this.validatorAllFields.bind(this)
});
并以这种方式定义异步验证器:
validatorAllFields(control: FormGroup): any {
if (control) {
if(control.value.field1 don't contain special char … &&
control.value.field2 don't contain special char … &&
…
control.value.field20 don't contain special char &&)
//validation is ok in this case
return null;
else
//validation fails here...
return {'formInvalid': 'true'}
} else {
return null;
}
}
您可以在没有任何附加包的情况下执行此操作,并且它会起作用。 只需实现:每个控件没有任何特殊字符,例如,它应该是相同的功能。
您可以使用 formGroupName
作为子表单,如果您愿意,甚至可以避免使用子表单。