通过 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 作为子表单,如果您愿意,甚至可以避免使用子表单。