2 votes

L'état du validateur asynchrone d'Angular ne se reflète pas dans l'état d'erreur du champ du formulaire

Je dispose d'un validateur asynchrone sur un fichier zip champ :

zip: ['', {
            validators: [
              Validators.required,
              Validators.minLength(5),
              Validators.maxLength(5)
            ],
            asyncValidators: [
              adPostFormValidators.isValidZip(this.locationService)
            ]
          },
      ],

Cependant, le champ ne semble pas refléter l'erreur provenant du validateur asynchrone tant que je ne clique pas hors du champ. Par exemple, avant que je ne clique pour sortir du champ (l'élément null est l'état d'erreur du champ) :

enter image description here

Je sais que le validateur asynchrone a été exécuté parce que j'affiche ses résultats dans la console :

enter image description here

Ensuite, lorsque je clique pour sortir ou que je perds le focus, l'état d'erreur est maintenant précis :

enter image description here

Cependant, le validateur n'a pas été relancé, car rien de nouveau n'a été enregistré dans la console.

2voto

MrSnappingTurtle Points 801

Donc il semble que parce que j'utilise ChangeDetectionStrategy.OnPush j'ai dû marquer manuellement les validateurs asynchrones pour vérification :

ref.markForCheck()
return { 'Is not a valid zip': { value: control.value } } as ValidationErrors

ref est de type ChangeDetectorRef .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X