Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

699
Vistas
Angular: agregar/eliminar validadores dinámicamente

Tengo un FormGroup definido como a continuación:

 this.businessFormGroup: this.fb.group({ 'businessType': ['', Validators.required], 'description': ['', Validators.compose([Validators.required, Validators.maxLength(200)])], 'income': [''] })

Ahora, cuando businessType es Other , quiero eliminar el validador Validators.required de description . Y si businessType no es Other , quiero volver a agregar Validators.required .

Estoy usando el siguiente código para agregar/eliminar dinámicamente Validators.required . Sin embargo, borra el validador Validators.maxLength existente.

 if(this.businessFormGroup.get('businessType').value !== 'Other'){ this.businessFormGroup.get('description').validator = <any>Validators.compose([Validators.required]); } else { this.businessFormGroup.get('description').clearValidators(); } this.businessFormGroup.get('description').updateValueAndValidity();

Mi pregunta es, ¿cómo puedo conservar los validadores existentes al agregar/eliminar el validador required ?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Si está usando Angular 12.2 o superior, puede usar los métodos de AbstractControl addValidators , removeValidators y hasValidator , según los documentos :

 if(this.businessFormGroup.get('businessType').value !== 'Other'){ this.businessFormGroup.get('description').addValidators(Validators.required); } else { this.businessFormGroup.get('description').clearValidators(); }

Para versiones anteriores, los formularios angulares tienen una función integrada setValidators() que permite la asignación programática de validadores. Sin embargo, esto sobrescribirá sus validadores.

Para tu ejemplo puedes hacer:

 if(this.businessFormGroup.get('businessType').value !== 'Other'){ this.businessFormGroup.controls['description'].setValidators([Validators.required, Validators.maxLength(200)]); } else { this.businessFormGroup.controls['description'].setValidators([Validators.maxLength(200)]); } this.businessFormGroup.controls['description'].updateValueAndValidity();

Es importante tener en cuenta que al usar este método sobrescribirá sus validadores existentes , por lo que deberá incluir todos los validadores que necesite/quiera para el control que está reiniciando.

over 4 years ago · Santiago Trujillo Denunciar

0

este me funciono

 onAddValidationClick(){ this.formGroup.controls["firstName"].setValidators(Validators.required); this.formGroup.controls["firstName"].updateValueAndValidity(); } onRemoveValidationClick(){ this.formGroup.controls["firstName"].clearValidators(); this.formGroup.controls["firstName"].updateValueAndValidity(); }
over 4 years ago · Santiago Trujillo Denunciar

0

Si cambia el "validador requerido" más de una vez (por ejemplo, usando una casilla de verificación), debe agregar esto:

 this.formGroup.controls["firstName"].setErrors(null);

Asi que:

 onAddValidationClick(){ this.formGroup.controls["firstName"].setValidators(Validators.required); this.formGroup.controls["firstName"].updateValueAndValidity(); } onRemoveValidationClick(){ this.formGroup.controls["firstName"].setErrors(null); this.formGroup.controls["firstName"].clearValidators(); this.formGroup.controls["firstName"].updateValueAndValidity(); }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda