Úhlové vlastní validace pro FormArray pole (Reaktivní Forma)

0

Otázka

Jsem nový Hranatý, a chcete zjistit, jak mám jít o provádění validace vlastní pole pro FormArray?

Na FormArray je dynamické, kde si můžete tlačit nebo odstranit FormGroup položky. Na FormGroup se skládá z pole1, pole2, pole3. Jestli někdo z pole není null, ostatní pole by měla být nastavena s validátory.nutné. Formulář bude platné, pokud všechna pole jsou buď nulové nebo plné.

Díky.

Níže je ukázkový kód:

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

Nejlepší odpověď

0

Zkuste tento.

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

Také budete muset spustit updateValueAndValidity() pro všechny ovládací prvky, když se stisknutí klávesy.

2021-11-25 00:55:40

Ahoj, narazil jsem níže na fg.ovládací prvky', když se snaží to. možné poradit? Typ '{ [key: string]: AbstractControl; }' musí mít '[Symbol.iterator] () metoda, která vrací iterátor.ts(2488)
braveducky

Opravena moje odpověď. Zkontrolujte, prosím, znovu.
N.F.

Ahoj, díky za pomoc. Udělal jsem nějaké změny, aby se vešly můj use case a přidal další podmínku jasné, validátory, pokud není požadováno. Celkově to vyjde na konci.
braveducky

V jiných jazycích

Tato stránka je v jiných jazycích

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