web-dev-qa-db-fra.com

Angular formes réactives définies et effacez les validateurs

Veuillez aider, je souhaite supprimer tous les validateurs du formulaire, veuillez indiquer si c'est possible ou non et sinon quelle est la meilleure façon de supprimer les validateurs si vous avez un groupe de formulaires de 20 contrôles de formulaire ou plus, voir l'exemple ci-dessous.

 ngOnInit() {
    this.exampleFormGroup = this.formBuilder.group({
     surname: ['', [Validators.required, Validators.pattern('^[\\w\\s/-/(/)]{3,50}$')]],
     initials: ['', [Validators.required, Validators.maxLength(4)]]
     });
  }

 public removeValidators() {
    this.exampleFormGroup.get('surname').clearValidators();
    this.exampleFormGroup.get('initials').clearValidators();
    this.exampleFormGroup.updateValueAndValidity();
 }

 public addValidators() { 
  this.exampleFormGroup .get('surname').setValidators([Validators.required,Validators.pattern('^[\\w\\s/-/(/)]{3,50}$')]);
  this.exampleFormGroup.get('initials').setValidators([Validators.required, Validators.maxLength(4)]);
  this.exampleFormGroup.updateValueAndValidity(); 
 }

La méthode ci-dessus addValidators() ajoutera des validateurs et removeValidators() supprimera les valideurs lors de son exécution. mais le problème que j'ai est, je dois spécifier le contrôle de formulaire im essayant d'effacer les validateurs. existe-t-il un moyen de simplement faire this.exampleFormGroup.clearValidators(); et de tout effacer dans le formulaire et de nouveau this.exampleFormGroup.setValidators() pour les remettre en place. Je sais que je peux demander une licorne mais dans un scénario où le formGroup a 20 contrôles ou plus, l'effacement et la définition des validateurs peuvent être pénibles, donc une carte sur la façon de gérer de tels scénarios sera très appréciée.

6
Silva

Vous pouvez faire quelque chose comme ça:

validationType = {
'surname': [Validators.required, Validators.pattern('^[\\w\\s/-/(/)]{3,50}$')],
'initials': [Validators.required, Validators.maxLength(4)]
}

ngOnInit() {
    this.exampleFormGroup = this.formBuilder.group({
     surname: ['', [Validators.required, Validators.pattern('^[\\w\\s/-/(/)]{3,50}$')]],
     initials: ['', [Validators.required, Validators.maxLength(4)]]
     });
  }

public removeValidators(form: FormGroup) {
    for (const key in form.controls) {
         form.get(key).clearValidators();
         form.get(key).updateValueAndValidity();
    }
}


public addValidators(form: FormGroup) {
        for (const key in form.controls) {
             form.get(key).setValidators(this.validationType[key]);
             form.get(key).updateValueAndValidity();
        }
}
17
UnluckyAj