Formularios de Angular - @angular/forms
Formulario reactivo en angular y formulario reactivo controlados por plantillas procesan y administran los datos del formulario de manera diferente.
Formulario Reactivo En Angular
- Proporcionan acceso directo y explícito al modelo de objetos de formularios subyacente.
- Son más robustos: son más escalables, reutilizables y comprobables.
- Si los formularios son una parte clave de la aplicación o si ya está utilizando patrones reactivos para crear la aplicación, use formularios reactivos.
- Proporcionan acceso directo a la API de formulario subyacente.
- Utilizan el flujo de datos sincrónico entre la vista y el modelo de datos.
- Las pruebas no requieren una comprensión profunda de la detección de cambios para probar correctamente las actualizaciones y la validación de los formularios.
- La directiva crea y administra una instacia para un elemento del formulario determinado (NgModel FormControl)
- Cada vez que se activa un cambio en el modelo de datos, la instancia devuelve un nuevo modelo de datos en lugar de actualizar el modelo de datos existente.
- Tiene la capacidad de realizar un seguimiento de los cambios únicos en el modelo de datos a través del observable del control.
- Proporcionan un enfoque basado en modelos para manejar entradas de formularios cuyos valores cambian con el tiempo.
- Cada cambio en el estado del formulario devuelve un nuevo estado, que mantiene la integridad del modelo entre cambios.
- Se construyen alrededor de flujos observables, donde las entradas y los valores de los formularios se proporcionan como flujos de valores de entrada, a los que se puede acceder de forma sincrónica
- Cualquier consumidor de los flujos tiene acceso para manipular esos datos de forma segura.
Formulario Controlados Por Plantillas
- Se basan en las directivas de la plantilla para crear y manipular el modelo de objetos subyacente.
- Son útiles para agregar un formulario simple a una aplicación, como un formulario de registro de lista de correo electrónico.
- Fáciles de agregar a una aplicación, pero no se escalan tan bien como las formas reactivas.
- Para requisitos de formulario y lógica muy básicos que se pueden administrar únicamente en la plantilla (Mejor Opcion)
- Abstraen la API de formulario subyacente
- Usan el flujo de datos asincrónico entre la vista y el modelo de datos.
- Abstracción de formularios basados en plantillas también afecta a las pruebas
- Las pruebas dependen en gran medida de la ejecución manual de detección de cambios para ejecutarse correctamente y requieren más configuración.
- La manipulación de los datos lo realiza solo la plantilla no hay directiva de intermediario ni instancia.
- Se basan en la mutabilidad con enlace de datos bidireccional para actualizar el modelo de datos en el componente a medida que se realizan cambios en la plantilla.
- Se basan en directivas incrustadas en la plantilla, junto con datos mutables para realizar un seguimiento de los cambios de forma asincrónica.
Formulario Reactivo vs Formulario Controlados Por Plantillas
|
Reactivo |
Basado en Plantillas |
Configuración del modelo de formulario |
Explícito, creado en la clase de componente |
Implícito, creado por directivas |
Modelo de datos |
Estructurado e inmutable |
No estructurado y mutable |
Flujo de datos |
Síncrono |
Asíncrono |
Validación de formularios |
Funciones |
Directivas |
La diferencia se demuestra en los ejemplos anteriores que utilizan el elemento de entrada de color favorito.
Ejemplo de formularios reactivos: la instancia de FormControl siempre devuelve un nuevo valor cuando se actualiza el valor del control.
import { Component } from '@angular/core';
import { FormControl } from '@angular/forms';
@Component({
selector: 'app-reactive-favorite-course',
template: `
Curso Favorito: <input type="text" [formControl]="favoriteCourseControl">
`
})
export class FavoriteCourseComponent {
favoriteCourseControl = new FormControl('');
}
Ejemplo de formularios controlados por plantilla: la propiedad de curso favorito siempre se modifica a su nuevo valor.
import { Component } from '@angular/core';
@Component({
selector: 'app-template-favorite-course',
template: `
Curso Favorito: <input type="text" [(ngModel)]="favoriteCourse">
`
})
export class FavoriteCourseComponent {
favoriteCourse = '';
}
Clases de Formularios Comunes
Nombre |
Descripción |
FormControl |
Realiza un seguimiento del valor y el estado de validación de un control de formulario individual. |
FormGroup |
Realiza un seguimiento de los mismos valores y estado para una colección de controles de formulario. |
FormArray |
Realiza un seguimiento de los mismos valores y estado para una matriz de controles de formulario. |
ControlValueAccessor |
Crea un puente entre las instancias angulares y los elementos DOM integrados FormControl. |
FormBuilder |
El servicio es un proveedor inyectable que se proporciona con el módulo de formularios reactivos. |
Nota:
- FormControl: Obtiene acceso inmediato para escuchar, actualizar y validar el estado de la entrada del formulario.
- FormGroup: Define un formulario con un conjunto fijo de controles que se pueden administrar juntos.
- FormGroup: Se pueden anidar grupos de formularios para crear formularios más complejos.
Lineamientos del uso de TypeScript
# Paso 1. Tablas de Lineamientos en TypeScript
- Tabla de Lineamiento de Nombre de Variables y Métodos en TypeScript
Tipo |
Convención de Nombre |
Descripción |
Resultado |
@angular/forms |
Upper Camel Case o Camel Case |
La primera letra de cada palabra concatenada se pone en mayúsculas e inicia con minúscula y se concatena con (Form) al final. |
upperCamelCase |
# Paso 2. Ejemplo de Lineamiento de Nombre de Variables y Métodos en TypeScript
Ejemplo: Archivo example.component.ts y uso de @angular/forms
@angular/forms
profileForm = new FormGroup({});
- profileForm: Revisar la Tabla de Lineamiento de Nombre de Variables y Métodos en TypeScript
Actualización de Formulario Reactivo
# Paso 1. Formas de Actualizar Modelo Reactivo
Nombre |
Descripción |
setValue() |
El método se adhiere estrictamente a la estructura del grupo de formularios y reemplaza todo el valor del modelo de formulario. |
patchValue() |
El método para reemplazar las propiedades definidas en el objeto que hayan cambiado en el modelo de formulario. |