FormArray é uma variante do FormGroup. A principal diferença é que seus dados são serializados como um array (em vez de serem serializados como um objeto no caso de FormGroup). Isso pode ser especialmente útil quando você não sabe quantos controles estarão presentes no grupo, como formulários dinâmicos.
Deixe-me tentar explicar com um exemplo rápido. Digamos, você tem um formulário onde captura o pedido de pizza de um cliente. E você coloca um botão para permitir que eles adicionem e removam quaisquer pedidos especiais. Aqui está a parte html do componente:
<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>
e aqui está a classe de componente que define e lida com solicitações especiais:
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 oferece mais flexibilidade do que FormGroup no sentido de que é mais fácil manipular FormControls usando "push", "insert" e "removeAt" do que usando "addControl", "removeControl", "setValue" etc. Os métodos FormArray garantem que os controles sejam devidamente rastreado na hierarquia do formulário.
espero que isto ajude.
Para criar formas reativas, um pai
FormGroup
é uma obrigação. IssoFormGroup
pode conter aindaformControls
, filhoformGroups
ouformArray
FormArray
pode ainda conter array deformControls
ou aformGroup
próprio.Quando devemos usar formArray?
Por favor, leia esta bela postagem que explica o uso de
formArray
O exemplo interessante naquele blog é sobre as viagens
formGroup
A estrutura de viagens
formGroup
usandoformControl
eformArray
seria algo como:Não se esqueça de brincar com este DEMO , e observe o uso de array para
cities
eplaces
de uma viagem.fonte
De: Livro de Anton Moiseev “Angular Development with Typescript, Second Edition.” :
Quando você precisar adicionar (ou remover) controles de forma programática a um formulário , use FormArray . É semelhante ao FormGroup, mas tem uma variável de comprimento . Enquanto FormGroup representa um formulário inteiro ou um subconjunto fixo de campos de um formulário , FormArray geralmente representa uma coleção de controles de formulário que podem aumentar ou diminuir .
Por exemplo, você pode usar FormArray para permitir que os usuários insiram um número arbitrário de emails.
fonte
Na documentação do angular, você pode ver que
Deixe-me mostrar o exemplo deles e tentar explicar como eu entendo isso. Você pode ver a fonte aqui
Imagine um formulário com os seguintes campos
Aqui temos
firstName
,lastName
,address
ealiases
All campo juntos são um grupo formulário para que embrulhar tudo emgroup
. Ao mesmo tempoaddress
é como um subgrupo, então o envolvemos em outrogroup
(você pode olhar o modelo para melhor compreensão)! Cada controle de formulário aqui estákey
excetoaliases
e isso significa que você pode inserir os valores que quiser como array simples usandoformBuilder
métodos comopush
.É assim que eu entendo, espero que ajude alguém.
fonte