Angular FormArray 字段的自定义验证(响应式表单)

Angular custom validation for FormArray fields (Reactive Form)

我是 Angular 的新手,想了解如何为 FormArray 执行自定义字段验证?

FormArray 是动态的,您可以在其中推送或删除 FormGroup 项目。 FormGroup 由field1、field2、field3 组成。如果其中一个字段不为空,则其他字段应设置为validators.required。如果所有字段都为空或已填充,则表单有效。

谢谢。

下面是代码示例:

formA!: FormGroup;

initializeForm(): void {
    this.formA = this.fb.group({
      item1: this.fb.array([this.createItem1()]),
      item2: this.fb.array([this.createItem2()]),
    });
  }

createItem1(): FormGroup {
   return this.fb.group({
       field1: null,
       field2: null,
       field3: null,
   });
}

试试这个。

createItem1(): FormGroup {
  const fg = this.fb.group({
      field1: null,
      field2: null,
      field3: null,
  });
   
  const validatorFn = (control: AbstractControl): { [key: string]: any } | null => {
    const obj = fg.getRawValue();
     
    if (obj.field1 || obj.field2 || obj.field3) {
      return Validators.required(control);
    }
     
    return null;
  };
   
  for (const control of Object.values(fg.controls)) {
    control.setValidators(validatorFn);
  }

  return fg;
}

此外,您还需要在按下按键时对所有控件执行 updateValueAndValidity()