J'ai une forme réactive en angulaire comme ci-dessous:
this.AddCustomerForm = this.formBuilder.group({
Firstname: ['', Validators.required],
Lastname: ['', Validators.required],
Email: ['', Validators.required, Validators.pattern(this.EMAIL_REGEX)],
Picture: [''],
Username: ['', Validators.required],
Password: ['', Validators.required],
Address: ['', Validators.required],
Postcode: ['', Validators.required],
City: ['', Validators.required],
Country: ['', Validators.required]
});
createCustomer(currentCustomer: Customer)
{
if (!this.AddCustomerForm.valid)
{
//some app logic
}
}
this.AddCustomerForm.valid renvoie false, mais tout semble bon.
J'ai essayé de trouver en vérifiant la propriété status dans la collection de contrôles. Mais je me demande s'il existe un moyen de trouver les invalides et de les afficher à l'utilisateur?
Réponses:
Vous pouvez simplement parcourir chaque contrôle et vérifier l'état:
la source
findInvalidControls()
vous rend?Je viens de lutter contre ce problème: chaque champ de formulaire est valide, mais le formulaire lui-même n'est toujours pas valide.
Il s'avère que j'avais défini «Validator.required» sur un FormArray où les contrôles sont ajoutés / supprimés dynamiquement. Ainsi, même si le FormArray était vide, il était toujours nécessaire et le formulaire était donc toujours invalide, même si chaque contrôle visible était correctement rempli.
Je n'ai pas trouvé la partie invalide du formulaire, car ma fonction 'findInvalidControls' ne vérifiait que FormControl et non FormGroup / FormArray. Alors je l'ai mis à jour un peu:
la source
Sous DevTools dans Chrome, sélectionnez l'onglet Console.
Dans la commande de type d'invite de console:
La sortie doit être similaire à ceci:
Dans ce cas, le texte souligné est pour le contrôle de formulaire
listen-address
. Et le texte encerclé:.ng-invalid
indique que le contrôle est invalide.la source
Les formulaires et tous vos contrôles étendent la classe angulaire AbstractControl. Chaque implémentation a un accesseur aux erreurs de validation.
La documentation de l'API contient toutes les références https://angular.io/api/forms/AbstractControl
Éditer
Je pensais que l'accesseur d'erreur fonctionnait de cette façon, mais ce lien vers github montre qu'il y a d'autres personnes qui pensaient la même chose que moi https://github.com/angular/angular/issues/11530
Dans tous les cas, en utilisant l'accesseur de contrôles, vous pouvez parcourir tous les formControls de votre formulaire.
la source
Maintenant, dans angular 9, vous pouvez utiliser la méthode markAllAsTouched () pour afficher les validateurs de contrôles non valides:
la source
Si vous n'avez pas beaucoup de champs dans le formulaire, vous pouvez simplement F12 et survoler le contrôle, vous pourrez voir le pop-up avec les valeurs vierges / touchées / valides du champ- "# fieldname.form-control.ng- untouched.ng-invalid ".
la source
Je pense que vous devriez essayer d'utiliser
this.form.updateValueAndValidity()
ou essayer d'exécuter cette même méthode dans chacun des contrôles.la source
essaye ça
la source
Cela enregistrera tous les noms des contrôles 😊
for (let el in this.ReactiveForm.controls) { if (this.ReactiveForm.controls[el].errors) { console.log(el) } }
vous pouvez en faire un tableau ou une chaîne et afficher à l'utilisateur
la source
J'ai pris la liberté d'améliorer le code AngularInDepth.com -s, afin qu'il recherche de manière récursive les entrées non valides dans les formes imbriquées également. Qu'il soit imbriqué par FormArray-s ou FormGroup-s. Entrez simplement le formGroup de niveau supérieur et il renverra tous les FormControls qui ne sont pas valides.
Vous pouvez éventuellement parcourir certains des contrôles de type "instanceof", si vous séparez le contrôle FormControl et l'ajout de fonctionnalités de tableau non valides dans une fonction distincte. Cela rendrait la fonction beaucoup plus propre, mais j'avais besoin d'une option globale et unique pour obtenir un tableau plat de tous les formControls invalides et c'est la solution!
Juste pour ceux qui en ont besoin, afin qu'ils n'aient pas à le coder eux-mêmes.
Modifier # 1
Il a été demandé qu'il renvoie également FormArray-s et FormGroups invalides, donc si vous en avez également besoin, utilisez ce code
la source
vous pouvez enregistrer la valeur du formulaire
console.log(this.addCustomerForm.value)
, cela consolidera la valeur de tous les contrôles, puis les champs null ou "" (vides) indiquent les contrôles non validesla source