Forme angulaire updateValueAndValidity de tous les enfants contrôles
Dans mon Angulaire 4 app, j'ai un formulaire avec plusieurs champs.
À certains moments, j'ai besoin de forcer la mise à jour de leur validité, de sorte que je suis en train de faire:
this.form.get('control1').updateValueAndValidity();
this.form.get('control2').updateValueAndValidity();
this.form.get('control3').updateValueAndValidity();
//and so on....
et puis:
this.form.updateValueAndValidity();
cela fonctionne bien.
Cependant, je me demandais si il ya une meilleure façon d'accomplir la même chose, il suffit d'appeler une méthode sur le formulaire parent.
Selon ses la documentation, le updateValueAndValidity()
méthode:
Par défaut, il permettra également de mettre à jour la valeur et la validité de son ancêtres.
mais dans mon cas, j'ai besoin de mettre à jour la valeur et la validité de son descendants. Si je peux me débarrasser de beaucoup de lignes de code.
- Avez-vous essayé quelque chose pour voir si il n'mise à jour de ses descendants?
- quelque chose comme ... ?
- ...ne pas appeler les descendants des méthodes directement en premier? J'aurais pensé
updateValueAndValidity
s'appliquerait également aux formulaires enfants. - oui bien sûr, et il ne fonctionne pas
- Question intéressante. Je pense qu'il n'est pas disponible hors de la boîte, il y a le même problème dans ce cas avec
markAsDirty
: github.com/angular/angular/issues/11774 je pense que vous devez faire de la solution de contournement et de réitérer les propriétés de l'objet parent et l'utilisationupdateValueAndValidity
sur chaque contrôle. Hmm. Il peut être utile tho qu'il serait accessible qu'à l'appeler sur le parent. - Voir la question connexe de quelques options: stackoverflow.com/questions/42235156/...
Vous devez vous connecter pour publier un commentaire.
Il n'est pas possible pour le moment de mettre à jour les descendants d'un AbstractControl (FormGroup, ...) avec la AbstractControl lui-même. Peut-être dans une prochaine version, il sera possible.
https://github.com/angular/angular/issues/6170
https://github.com/angular/angular/issues/22166
mise à jour: un pull request est déjà ouvert
https://github.com/angular/angular/pull/19829
J'ai résolu mon problème, ce qui était semblable à la vôtre, par recursing les contrôles et manuellement le déclenchement de la mise à jour.
Probablement, ce n'est pas une solution optimale: