Search code examples
angularangular2-forms

Angular 2 FormGroup Add Validators dynamic


i'm tring to add validator to FormContol dynamic (not on initialization) and it's not work....

the code:

this.formGroup.controls["firstName"].validator = Validators.Required;

Did anyone do it?


Solution

  • Try this, it should work

    this.formGroup.controls["firstName"].setValidators(Validators.required);
    

    For multiple validators

    this.formGroup.controls["firstName"].setValidators([Validators.required, Validators.minLength(2)]);
    

    But doing so will override any validators that are provided during initialization

    EDIT :

    To reflect the form controls with newly added Validators immediately, we have to call this.formGroup.controls["firstName"].updateValueAndValidity(); after setting validators dynamically.

    this.formGroup.controls["firstName"].setValidators(Validators.required);
    this.formGroup.controls["firstName"].updateValueAndValidity();
    

    DEMO for the same

    * NOTE *

    updateValueAndValidity() will trigger a valueChanges event even if the value didn't really change (potentially resulting in an infinite loop, if you're calling it from within a valueChanges subscription). You can prevent that by using the optional parameter object: { onlySelf: true, emitEvent: false}