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
FormGroupes imprescindible. EstoFormGrouppuede contener ademásformControls, niñoformGroupsoformArrayFormArraypuede contener además una matriz deformControlso aformGroupsí mismo.¿Cuándo debemos usar formArray?
Lea esta hermosa publicación que explica el uso de
formArrayEl ejemplo interesante de ese blog es sobre los viajes
formGroupLa estructura de los viajes
formGroupusandoformControlyformArrayse vería así:No olvides jugar con esto DEMO y observe el uso de array para
citiesyplacesde 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,addressy elaliasescampo Todos juntos son el grupo formulario para que envuelven todo engroup. Al mismo tiempo,addresses 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ánkeyexceptoaliasesy significa que puede introducir sus valores tanto como desee como una matriz simple usandoformBuildermétodos comopush.Así es como lo entiendo, espero que ayude a alguien.
fuente