Uhlové vlastné overenie FormArray polia (Reaktívne Formy)

0

Otázka

Som nový Uhlové a chcel by som zistiť, ako to mám ísť o vykonaní vlastné overovacie pre FormArray?

Na FormArray je dynamický, kde môžete tlačiť alebo odstrániť FormGroup položky. Na FormGroup pozostáva z pole1, field2, field3. Ak niektorá z oblasti nie je null, ostatné polia by mali byť stanovené s validators.požadované. Formulár bude platné, ak všetky polia sú buď nulové, alebo vyplnená.

Vďaka.

Nižšie je ukážka kódu:

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

Najlepšiu odpoveď

0

Skúste to.

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

Tiež budete musieť vykonať updateValueAndValidity() pre všetky ovládacie prvky keď je tlačidlo stlačené.

2021-11-25 00:55:40

Ahoj, som sa stretol nižšie na 'fg.ovládacie prvky", keď sa snažil toto. možné poradiť? Typ '{ [kľúč: string]: AbstractControl; } "musia mať" [Symbol.iterator]()' metódu, ktorá vráti iterator.ts(2488)
braveducky

Pevné moja odpoveď. Prosím, pozrite sa znova.
N.F.

Ahoj, vďaka za pomoc. Urobil som niektoré zmeny, aby sa zmestili môj prípad použitia a pridal ďalšie podmienky jasné validators, keď sa nevyžaduje. Celkovo to vyjde do konca roka.
braveducky

V iných jazykoch

Táto stránka je v iných jazykoch

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