Saltar al contenido

¿Por qué debo usar Validators.compose()?

Ya no tienes que investigar más por todo internet porque has llegado al espacio justo, poseemos la respuesta que necesitas y sin liarte.

Solución:

cuando creamos new FormControl/FormGroup/FormArray(Control abstracto) – coerceToValidator se llama.

function coerceToValidator(
    validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null): ValidatorFn|
    null  null;


export function composeValidators(validators: Array): ValidatorFn|null 
  return validators != null ? Validators.compose(validators.map(normalizeValidator)) : null;

Entonces, no hay necesidad de componer validadores antes de pasarlo a un AbstractControl.

13/06/16 fue agregado feat(forms): compose validator fns automatically if arrays a partir de ahora, Validators.compose está ahí para la compatibilidad con versiones anteriores.

Sé que esta es una pregunta antigua, pero surgió en una búsqueda reciente.

La razón principal por la que puede querer usar Validators.compose() es reutilizar múltiples validadores. Digamos que quieres comprobar que un valor está entre 0 y 100. La primera vez, escribirías:

this.form = this.fb.group(
  foo: [ 0, [ Validators.min(0), Validators.max(100)]]
);

Ahora supongamos que desea hacer eso en varios lugares dentro de su aplicación. Para evitar la duplicación de código, crearía su propio validador simplemente componiéndolo a partir de los validadores existentes, exponiéndolo y reutilizándolo donde lo necesite:

// custom-validators.ts
import  Validators  from '@angular/forms';
export class CustomValidators 
  readonly betweenZeroHundred = Validators.compose([
    Validators.min(0),
    Validators.max(100),
  ]);


// form1 
this.form = this.fb.group(
  foo: [ 0, [CustomValidators.betweenZeroHundred()]]
);

// form2
this.form = this.fb.group(
  bar: [ 100, [CustomValidators.betweenZeroHundred()]]
);

Hoy en día, con el operador de propagación, puede lograr un resultado similar, sin la compose():

export class CustomValidators 
  readonly betweenZeroHundred = [Validators.min(0), Validators.max(100)];


this.form = this.fb.group(
  bar: [ 100, [...CustomValidators.betweenZeroHundred, Validators.required]]
);


Al final, se trata de qué enfoque se adapta mejor a su equipo y su situación.

Sección de Reseñas y Valoraciones

Nos puedes añadir valor a nuestra información añadiendo tu experiencia en las explicaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *