Después de de nuestra extensa búsqueda de datos pudimos solucionar esta incógnita que suelen tener ciertos los lectores. Te compartimos la respuesta y nuestro deseo es serte de mucha apoyo.
Solución:
Prueba esto, debería funcionar
this.formGroup.controls["firstName"].setValidators(Validators.required);
Para múltiples validadores
this.formGroup.controls["firstName"].setValidators([Validators.required, Validators.minLength(2)]);
Pero hacerlo anulará cualquier validador que se proporcione durante la inicialización.
EDITAR :
Para reflejar los controles de formulario con los recién agregados Validators
inmediatamente, tenemos que llamar this.formGroup.controls["firstName"].updateValueAndValidity();
después de configurar validadores dinámicamente.
this.formGroup.controls["firstName"].setValidators(Validators.required);
this.formGroup.controls["firstName"].updateValueAndValidity();
DEMO para el mismo
* NOTA *
updateValueAndValidity() activará un evento valueChanges incluso si el valor realmente no cambió (lo que podría generar un bucle infinito, si lo llama desde una suscripción valueChanges). Puede evitar eso usando el objeto de parámetro opcional: onlySelf: trueemitEvent: false
Si bien la respuesta de Amit Chigadani es correcta, tenga en cuenta lo siguiente.
Si bien esta solución funciona para actualizar validadores, los nuevos validadores no se ejecutarán hasta que cambie el valor de los campos del formulario. por lo tanto, se recomienda ejecutar la siguiente función inmediatamente después de actualizar sus validadores;)
En términos simples: agregue la línea, si desea que sus clases ng-valid y ng-invalid se actualicen.
this.formGroup.controls["firstName"].setValidators([Validators.required, Validators.minLength(2)]);
this.formGroup.controls["firstName"].updateValueAndValidity();
En caso de que solo desee actualizar el valor y la validez de este control único, agregue esta opción
this.formGroup.controls["firstName"].setValidators([Validators.required, Validators.minLength(2)]);
this.formGroup.controls["firstName"].updateValueAndValidity(onlySelf: true);
Otra nota al margen. En Angular2, uno no debería usar el array sintaxis para obtener controles de grupos de formularios, pero esto
this.formGroup.get("firstName");
Que también acepta la notación de punto
this.formGroup.get("userSectionFormGroup.firstName");
obtuve la solución que podemos hacer con el siguiente código.
const validators = new Array();
validations.forEach(validation =>
switch (validation.Type)
case 'required':
validators.push(Validators.required);
break;
case 'minLength':
validators.push(Validators.minLength(parseInt(validation.Expression, 10)));
break;
case 'maxLength':
validators.push(Validators.maxLength(parseInt(validation.Expression, 10)));
break;
case 'pattern':
validators.push(Validators.pattern(validation.Expression));
break;
);
this.form.controls[i].setValidators(validators);
}
}
});