FormArray alanları için açısal özel doğrulama (Reaktif Form)

0

Soru

Angular'da yeniyim ve FormArray için özel alan doğrulaması yapma konusunda nasıl gideceğimi kontrol etmek istiyorum?

FormGroup öğelerini itebileceğiniz veya kaldırabileceğiniz FormArray dinamiktir. Form grubu, alan1, alan2, alan3'ten oluşur. Alanlardan biri null değilse, diğer alanlar doğrulayıcılarla ayarlanmalıdır.gerekli. Tüm alanlar boş veya doluysa form geçerli olacaktır.

Teşekkürler.

Aşağıda kod örneği verilmiştir:

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

En iyi cevabı

0

Bu deneyin.

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

Ayrıca yürütmeniz gerekecek updateValueAndValidity() tuşa basıldığında tüm kontroller için.

2021-11-25 00:55:40

Merhaba, fg'de aşağıdakilerle karşılaştım.bunu denerken kontroller. Olası tavsiyelerde? '{ [key: string]: AbstractControl;} 'türünde bir' [Sembolü olmalıdır.yineleyici] ()' yineleyici döndüren yöntem.ts (2488)
braveducky

Cevabımı düzelttim. Tekrar kontrol edin lütfen.
N.F.

Merhaba, yardımın için teşekkürler. Kullanım durumuma uyacak bazı değişiklikler yaptım ve gerekmediğinde doğrulayıcıları temizlemek için ek koşul ekledim. Genel olarak, sonunda işe yarıyor.
braveducky

Diğer dillerde

Bu sayfa diğer dillerde

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