Angular: Les validateurs de formulaires sont réexécutés lors de la (re)création de la vue

Créé le 28 sept. 2017  ·  1Commentaire  ·  Source: angular/angular

Je soumets un...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[x] Bug report  <!-- Please search GitHub for a similar issue or PR before submitting -->
[ ] Feature request
[ ] Documentation issue or request
[ ] Support request => Please do not submit support request here, instead see https://github.com/angular/angular/blob/master/CONTRIBUTING.md#question

Comportement actuel

Lorsque la directive associée à un contrôle de formulaire est créée dans la vue, les validateurs sont déclenchés.

Comportement attendu

Les validateurs ne doivent modèle .

Reproduction minimale du problème avec des instructions

https://stackblitz.com/edit/angular-reactive-forms-issue?file=app/app.component.ts

  1. Ouvrez la console.
  2. Utilisez le bouton _Toggle visibilité_ pour confirmer que les validateurs sont en cours d'exécution à chaque création de directive de contrôle.

Quelle est la motivation / le cas d'utilisation pour changer le comportement ?

  1. Continuez à partir des étapes ci-dessus.
  2. Appuyez sur _définir les erreurs manuellement_ pour insérer une erreur manuellement (il s'agit de se moquer de la définition manuelle d'une erreur après le retour de la validation du backend)
  3. Appuyez sur _Toggle visibilité_ pour le faire disparaître. Rien ne se passe dans la console.
  4. Appuyez à nouveau pour faire apparaître la commande. Notez que la console se connecte, ce qui signifie que les validateurs sont en cours d'exécution.

Observez le fait que le message d'erreur a maintenant disparu . Basculer la vue se moque du cas d'utilisation d'une forme multipartite.


Si c'est à dessein, je n'en vois pas de raison. Nous créons une vue dans laquelle nous écrivons un modèle de formulaire de données à afficher. L'action de lire à partir du modèle ne devrait pas déclencher de validateurs, pour autant que je sache. À mon avis, les validateurs doivent être exécutés lorsque les instances FormControl sont créées dans le modèle. _Pourquoi les validateurs sont-ils déclenchés lorsque la valeur n'a pas changé ?_

Environnement

<br i="34"/>
Angular version: 4.3.6<br i="35"/>
<!-- Check whether this is still an issue in the most recent Angular version -->
P4 forms validators medium confirmed triage #1 bufix

Commentaire le plus utile

Oui sonne bien.
Un changement dans la vue ne doit pas affecter le modèle dans les formulaires réactifs et aucun changement sur le modèle ne doit déclencher la validation.

Je l'ai identifié sur https://github.com/angular/angular/blob/17eaef0311990e1a06c028f19bc6c63dcd775f31/packages/forms/src/directives/reactive_directives/form_group_directive.ts#L98 -L104

Il exécute toujours une nouvelle exécution de validation ( updateValueAndValidity() ), alors qu'il ne devrait le faire que s'il y avait de nouveaux validateurs introduits par la directive de contrôle.

Renommer également la fonction en addControlDirective() peut réduire la confusion sur ce qu'elle fait.

Peut être lié d'une manière ou d'une autre à #14376 car il s'agit à la fois de modifier la vue sur un formulaire réactif et il semble que FormGroupDirective soit en cause.

>Tous les commentaires

Oui sonne bien.
Un changement dans la vue ne doit pas affecter le modèle dans les formulaires réactifs et aucun changement sur le modèle ne doit déclencher la validation.

Je l'ai identifié sur https://github.com/angular/angular/blob/17eaef0311990e1a06c028f19bc6c63dcd775f31/packages/forms/src/directives/reactive_directives/form_group_directive.ts#L98 -L104

Il exécute toujours une nouvelle exécution de validation ( updateValueAndValidity() ), alors qu'il ne devrait le faire que s'il y avait de nouveaux validateurs introduits par la directive de contrôle.

Renommer également la fonction en addControlDirective() peut réduire la confusion sur ce qu'elle fait.

Peut être lié d'une manière ou d'une autre à #14376 car il s'agit à la fois de modifier la vue sur un formulaire réactif et il semble que FormGroupDirective soit en cause.

Cette page vous a été utile?
0 / 5 - 0 notes