角度定义的验证FormArray领域(反应性的形式)

0

的问题

我是新来的角和想查询我如何去关于执行定义领域的验证FormArray?

该FormArray是动态的,你可以推动或删除FormGroup项目。 该FormGroup由field1,field2,field3. 如果任何一个领域是不null,其他领域的应设置与验证程序。需要。 形式将是有效的,如果所有领域都null或填补。

谢谢。

下面是代码样本:

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,
   });
}

1

最好的答案

0

试试这个。

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() 对于所有的控制的时候钥匙按下。

2021-11-25 00:55:40

嗨,我遇到了以下的在'fg。控制'时试图这一点。 可能的建议吗? 类型'{[关键:串的]:AbstractControl;}'必须'[符号。迭代]()'法返回的一个迭代器。ts(2488)
braveducky

固定我的答案。 请再检查一次。
N.F.

嗨,谢谢你的帮助。 我做了一些改变,以适应我的使用情况和增加附加条件以清除验证程序在不需要的。 总体而言,它作出的结束。
braveducky

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................