form validation (ng-required, $error) en Angular moderno
La validación pasa de atributos en el template a la definición del formulario en el componente, donde es tipada y testeable.
Antes · AngularJS
<form name="f" ng-submit="f.$valid && vm.save()" novalidate>
<input name="email" type="email" ng-model="vm.email" required>
<span ng-show="f.email.$touched && f.email.$error.required">Required</span>
</form>Después · Angularform = new FormGroup({
email: new FormControl('', {
nonNullable: true,
validators: [Validators.required, Validators.email],
}),
});
<form [formGroup]="form" (ngSubmit)="save()">
<input formControlName="email" type="email" />
@if (form.controls.email.touched && form.controls.email.hasError('required')) {
<span>Required</span>
}
</form>Qué cambia
- Los atributos required, minlength y pattern pasan a ser Validators en el FormControl.
- $error, $touched y $dirty pasan a ser hasError(), touched y dirty.
- Las directivas de validación propias pasan a ser funciones validadoras.
Consejo de migración. En los formularios se esconden las reglas de negocio no documentadas. Lista todas las validaciones del formulario viejo antes de reconstruirlo, y convierte cada una en una prueba unitaria.
Relacionado
¿Planeas una migración o una plataforma de microfrontends?
En una llamada de 20 minutos me cuentas tu situación y te digo cómo la abordaría. Si todavía no vale la pena, también te lo digo.
Escríbeme por LinkedIn