Unghiulare validare personalizate pentru FormArray domenii (Reactivă Forma)

0

Problema

Sunt nou Unghiulare și-ar dori pentru a verifica cum pot să merg despre efectuarea câmp personalizat de validare pentru FormArray?

La FormArray este dinamic unde te poate împinge sau elimina FormGroup elemente. La FormGroup este format din field1, domeniu2, field3. Dacă nici unul dintre câmpul nu este nulă, celelalte domenii ar trebui să fie stabilite cu validatoare.necesare. Formularul va fi valabil dacă toate câmpurile sunt null sau umplut.

Multumesc.

Mai jos este o mostră de cod:

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

Cel mai bun răspuns

0

Încercați acest lucru.

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

De asemenea, veți avea nevoie pentru a executa updateValueAndValidity() pentru toate controalele când tasta apăsată.

2021-11-25 00:55:40

Salut, am intampinat de mai jos la fg.controale' atunci când încearcă acest lucru. posibil să se recomanda? Tip '{ [cheie: string]: AbstractControl; }' trebuie să aibă o '[Simbol.iterator]()' metodă care returnează un iterator.ts(2488)
braveducky

Fix răspunsul meu. Vă rugăm să verificați din nou.
N.F.

Salut, multumesc pentru ajutor. Am făcut unele modificări pentru a se potrivi meu caz de utilizare și a adăugat condiție suplimentară pentru a șterge validatoare atunci când nu este necesar. În general, se rezolvă în final.
braveducky

În alte limbi

Această pagină este în alte limbi

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