FormArray es una variante de FormGroup. La diferencia clave es que sus datos se serializan como una matriz (en lugar de ser serializados como un objeto en el caso de FormGroup). Esto puede ser especialmente útil cuando no sabe cuántos controles estarán presentes dentro del grupo, como formularios dinámicos.
Permítanme intentar explicarlo con un ejemplo rápido. Digamos que tiene un formulario donde captura el pedido de pizza de un cliente. Y colocas un botón para permitirles agregar y eliminar solicitudes especiales. Aquí está la parte html del 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>
y aquí está la clase de componente que define y maneja solicitudes especiales:
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 ofrece más flexibilidad que FormGroup en el sentido de que es más fácil manipular FormControls usando "push", "insert" y "removeAt" que usando FormGroup's "addControl", "removeControl", "setValue", etc. Los métodos FormArray aseguran que los controles sean debidamente rastreada en la jerarquía del formulario.
espero que esto ayude.
Para crear formas reactivas, un padre
FormGroup
es imprescindible. EstoFormGroup
puede contener ademásformControls
, niñoformGroups
oformArray
FormArray
puede contener además una matriz deformControls
o aformGroup
sí mismo.¿Cuándo debemos usar formArray?
Lea esta hermosa publicación que explica el uso de
formArray
El ejemplo interesante de ese blog es sobre los viajes
formGroup
La estructura de los viajes
formGroup
usandoformControl
yformArray
se vería así:No olvides jugar con esto DEMO y observe el uso de array para
cities
yplaces
de un viaje.fuente
De: Anton Moiseev Libro "Desarrollo angular con mecanografiado, segunda edición". :
Cuando necesite agregar (o quitar) controles a un formulario mediante programación , use FormArray . Es similar a FormGroup pero tiene una variable de longitud . Mientras que FormGroup representa un formulario completo o un subconjunto fijo de los campos de un formulario , FormArray generalmente representa una colección de controles de formulario que pueden crecer o reducirse .
Por ejemplo, puede usar FormArray para permitir que los usuarios ingresen una cantidad arbitraria de correos electrónicos.
fuente
Desde la documentación angular puedes ver que
Permítanme mostrarles su ejemplo y tratar de explicarles cómo entiendo esto. Puedes ver la fuente aquí
Imagina un formulario que tiene los siguientes campos
Aquí tenemos
firstName
,lastName
,address
y elaliases
campo Todos juntos son el grupo formulario para que envuelven todo engroup
. Al mismo tiempo,address
es como un subgrupo, así que lo envolvemos en otrogroup
(¡puedes mirar la plantilla para una mejor comprensión)! Todos los controles de formulario aquí estánkey
exceptoaliases
y significa que puede introducir sus valores tanto como desee como una matriz simple usandoformBuilder
métodos comopush
.Así es como lo entiendo, espero que ayude a alguien.
fuente