Carlos Cifuentes
Referencia AngularJS → Angular

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 · Angular
form = 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