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.