FormArray to odmiana FormGroup. Kluczową różnicą jest to, że jego dane są serializowane jako tablica (w przeciwieństwie do serializacji jako obiektu w przypadku FormGroup). Może to być szczególnie przydatne, gdy nie wiesz, ile kontrolek będzie obecnych w grupie, takich jak formularze dynamiczne.
Spróbuję wyjaśnić na krótkim przykładzie. Powiedzmy, że masz formularz, w którym rejestrujesz zamówienie klienta na pizzę. Umieszczasz przycisk, aby umożliwić im dodawanie i usuwanie wszelkich specjalnych życzeń. Oto część html komponentu:
<section>
<p>Any special requests?</p>
<ul formArrayName="specialRequests">
<li *ngFor="let item of orderForm.controls.specialRequests.controls; let i = index">
<input type="text" formControlName="{{i}}">
<button type="button" title="Remove Request" (click)="onRemoveSpecialRequest(i)">Remove</button>
</li>
</ul>
<button type="button" (click)="onAddSpecialRequest()">
Add a Request
</button>
</section>
a oto klasa komponentów definiująca i obsługująca specjalne żądania:
constructor () {
this.orderForm = new FormGroup({
firstName: new FormControl('Nancy', Validators.minLength(2)),
lastName: new FormControl('Drew'),
specialRequests: new FormArray([
new FormControl(null)
])
});
}
onSubmitForm () {
console.log(this.orderForm.value);
}
onAddSpecialRequest () {
this.orderForm.controls
.specialRequests.push(new FormControl(null));
}
onRemoveSpecialRequest (index) {
this.orderForm.controls['specialRequests'].removeAt(index);
}
FormArray oferuje większą elastyczność niż FormGroup w tym sensie, że łatwiej jest manipulować formantControls za pomocą "push", "insert" i "removeAt" niż przy użyciu formantów "addControl", "removeControl", "setValue" itd. FormArray. prawidłowo śledzone w hierarchii formularza.
mam nadzieję że to pomoże.
Do stworzenia formularzy reaktywnych niezbędny
FormGroup
jest rodzic . MożeFormGroup
to dalej zawieraćformControls
, childformGroups
lubformArray
FormArray
może ponadto zawierać tablicęformControls
lubformGroup
siebie.Kiedy powinniśmy używać formArray?
Przeczytaj ten piękny post, który wyjaśnia użycie
formArray
Ciekawy przykład na tym blogu dotyczy wycieczek
formGroup
Struktura wycieczek
formGroup
przy użyciuformControl
iformArray
wyglądałaby mniej więcej tak:Nie zapomnij, aby grać z tym DEMO , i zauważyć wykorzystanie macierzy do
cities
iplaces
od wycieczkę.źródło
Od: Książka Antona Moiseeva „Angular Development with Typescript, wydanie drugie”. :
Gdy musisz programowo dodać (lub usunąć) kontrolki do formularza , użyj FormArray . Jest podobny do FormGroup, ale ma zmienną długości . Podczas gdy FormGroup reprezentuje cały formularz lub ustalony podzbiór pól formularza , FormArray zwykle reprezentuje kolekcję kontrolek formularza, które mogą rosnąć lub zmniejszać się .
Na przykład możesz użyć FormArray, aby umożliwić użytkownikom wprowadzanie dowolnej liczby wiadomości e-mail.
źródło
Z dokumentacji kątowej widać to
Pokażę Ci ich przykład i spróbuję wyjaśnić, jak to rozumiem. Możesz zobaczyć źródło tutaj
Wyobraź sobie formularz, który ma następujące pola
Tutaj mamy
firstName
,lastName
,address
aaliases
wszystkie pola są razem grupa forma więc zawinąć wszystkogroup
. Jednocześnieaddress
jest jak podgrupa, więc zawijamy ją w innągroup
(możesz spojrzeć na szablon dla lepszego zrozumienia)! Każda kontrolka formularza jest tutajkey
wyjątkiemaliases
i oznacza to, że możesz włożyć do niej wartości tak bardzo, jak chcesz, jak prosta tablica przy użyciuformBuilder
metod takich jakpush
.Tak to rozumiem, mam nadzieję, że to komuś pomoże.
źródło