Obtenez toutes les erreurs de validation Angulaires 2 FormGroup
Étant donné ce code:
this.form = this.formBuilder.group({
email: ['', [Validators.required, EmailValidator.isValid]],
hasAcceptedTerms: [false, Validators.pattern('true')]
});
Comment puis-je obtenir toutes les erreurs de validation de this.form
?
Je suis en train d'écrire des tests unitaires et souhaitez inclure la validation des erreurs dans le message d'assertion.
- Au lieu de Validateurs.motif('true') vous pourrait/devrait utiliser les Validateurs.requiredTrue pour appliquer la case à cocher en cours de vérification.
Vous devez vous connecter pour publier un commentaire.
J'ai rencontré le même problème et pour trouver toutes les erreurs de validation et de les afficher, j'ai écrit méthode suivante:
Nom du formulaire
productForm
doit être changé à la vôtre.Il fonctionne de manière suivante: nous recevons tous nos contrôles de formulaire en format
{[p: string]: AbstractControl}
et itérer par chaque erreur de clé, pour obtenir les détails de l'erreur. Il sautenull
des valeurs d'erreur.Il peut également être modifié pour afficher les erreurs de validation sur le modèle de la vue, il suffit de remplacer
console.log(..)
à ce que vous avez besoin.' + controlErrors[keyErrors];
au lieu de', controlErrors[keyErrors];
?ValidationErrors
angulaire 2?C'est la solution avec
FormGroup
à l'intérieur de supports ( comme ici )Testé sur: Angulaire 4.3.6
get-forme de validation des erreurs.ts
Utilisant l'exemple:
Ou vous pouvez simplement utiliser cette bibliothèque pour obtenir toutes les erreurs, même de profondes et des formes dynamiques.
Vous voudrez alors
import {SuperForm} from 'npm i @naologic/forms';
Puis il suffit de passer le FormGroup pour récupérer toutes vos erreurs
Mise à JOUR:
Vous pouvez utiliser
npm i @naologic/forms
et l'utilisationNaoFromGroup
au lieu de la forme classique du groupe angulaires. Il a quelques nouvelles fonctions, et vous pouvez également obtenir toutes les erreurs.Désolé il n'y a pas de docs pourtant, il suffit de regarder le code.
Mise à JOUR:
la lib nécessite angulaire 6, car il utilise AbstractControlOptions
Ceci est une autre variante qui recueille les erreurs de manière récursive et ne dépend pas d'une bibliothèque externe comme
lodash
(ES6 uniquement):Je l'ai pris de Deborahk et modifié un peu.
Basé sur la @MixerOID réponse, voici ma solution finale en tant que composant (peut-être que je créer une bibliothèque). Je soutiens également les FormArray de l':
Et le code HTML:
Utilisation:
Essayer Cela , il fera appel de validation pour tous les contrôles de formulaire :
Vous pouvez parcourir plus de cela.forme.les erreurs de la propriété.
this.form.errors
renvoie uniquement les erreurs de validation pour lathis.form
, pas pourthis.form.controls
. Vous pouvez valider FormGroups et de ses enfants (nombre arbitraire de FormGroups, FormControls et FormArrays) séparément. Pour récupérer toutes les erreurs, je pense que vous devez leur demander de manière récursive.Je suis en utilisant angulaire 5 et vous pouvez simplement vérifier l'état de la propriété de votre formulaire à l'aide de FormGroup par exemple
cette.forme.statut serait "non VALIDE", à moins que tous les champs de passer l'ensemble des règles de validation.
La meilleure partie est qu'il détecte les changements en temps réel.
Pour un grand FormGroup arbre, vous pouvez utiliser lodash pour nettoyer l'arbre et obtenir un arbre de simplement les contrôles avec des erreurs. Ceci est fait par récurrents à travers les contrôles enfants (p. ex. à l'aide de
allErrors(formGroup)
), et la taille des tout-valide sous-groupes de contrôles: