


Comment créer des directives basées sur des formulaires dans AngularJS
Feb 19, 2025 am 11:52 AM
Points de base
- Créer des composants de forme réutilisables à l'aide des directives AngularJS.
- Implémentez les méthodes de vérification personnalisées dans les directives pour gérer la vérification complexe des entrées, garantissant l'intégrité des données avant d'être soumise au serveur.
- Utilisez des technologies de vérification de formulaire intégrées angularjs (telles que
ng-required
etng-pattern
) pour établir rapidement la vérification de l'entrée du client. - Utiliser
FormController
dans AngularJS pour gérer l'état et la vérification du formulaire pour fournir aux utilisateurs des commentaires instantanés et améliorer l'expérience utilisateur. - Utilisez la directive
ng-submit
pour gérer les soumissions de formulaire dans AngularJS, bloquer le comportement de soumission par défaut et activer la logique de vérification personnalisée avant d'envoyer des données au serveur.
De nombreux développeurs sont confrontés à des défis uniques lors de l'exécution de contraintes commerciales complexes sur les données soumises par l'utilisateur. Récemment, mon équipe a fait face à ce défi lorsque j'écrivais une demande sur Giftcards.com. Nous devons trouver un moyen de permettre à nos clients de modifier plusieurs produits en une seule vue, chacun avec ses propres règles de vérification uniques.
Cela se révèle difficile car il nous oblige à utiliser plusieurs balises <form></form>
dans le code source HTML et à maintenir un modèle de validation pour chaque instance de formulaire. Avant de trouver la solution, nous avons essayé de nombreuses méthodes, telles que l'utilisation de ngRepeat
pour afficher des sous-formulaires. Enfin, nous créons une directive pour chaque type de produit (chaque directive a un <form></form>
dans sa vue) et nous lions la directive à son contr?leur parent. Cela nous permet de tirer parti de l'héritage de la forme parentale d'Angular pour garantir que le formulaire parent n'est valide que si toutes les formes enfants sont valides. Dans ce didacticiel, nous créerons un écran de revue de produit simple (en survivant les composants clés de notre application actuelle). Nous aurons deux produits, chacun avec ses propres instructions et chaque produit a des règles de vérification uniques. Il y aura un simple bouton de paiement, qui garantira que les deux formulaires seront valides.
Si vous êtes impatient de voir comment cela fonctionne réellement, vous pouvez sauter directement à notre démo ou télécharger le code à partir de notre référentiel GitHub.
à propos de la commande
La directive est un morceau de code HTML qui traverse le compilateur HTML d'AngularJS ($compile
) et est attaché au DOM. Le compilateur est responsable de la traversée du DOM et de la recherche de composants qu'il peut convertir en objets à l'aide d'autres directives enregistrées. Les directives travaillent dans une portée isolée et maintiennent leurs propres opinions. Ce sont des outils puissants qui facilitent les composants réutilisables qui peuvent être partagés tout au long de l'application. Pour une revue rapide, consultez cet article ou la documentation AngularJS.
résout notre problème fondamental de deux manières: Premièrement, chaque instance a une portée isolée; deuxièmement, la directive est passé en utilisant le compilateur, qui utilise la directive angulaire ngForm
pour reconna?tre l'élément de forme. Cette directive intégrée permet à plusieurs éléments de formulaire imbriqués d'accepter un attribut name
facultatif à instanciate FormController
et renverra l'objet formulaire.
à propos de Form Controller
Lorsque le compilateur reconna?t n'importe quel objet de forme dans le DOM, il instanciera un objet ngForm
à l'aide de la directive FormController
. Ce contr?leur analysera tous les éléments de la zone d'entrée, de sélection et de texte et créera des contr?les correspondants. Le contr?le nécessite une propriété modèle pour configurer la liaison des données bidirectionnelle et permet une rétroaction instantanée des utilisateurs via diverses méthodes de vérification prédéfinies. Fournissez des commentaires instantanés aux consommateurs, ce qui leur permet de savoir quelles informations sont valides avant de faire des demandes HTTP.
Méthode de vérification pré-construite
Packages angulaires 14 Méthodes de vérification standard. Ceux-ci incluent min
, max
, required
et d'autres validateurs. Ils sont con?us pour comprendre et manipuler presque tous les types d'entrée HTML5 et sont compatibles avec les navigateurs.
<input type="text" ng-model="size" ng-required="true" novalidate> <span ng-show="myForm.size.$error.required"> Size: The value is required! </span>
L'exemple ci-dessus montre comment utiliser le validateur de directive ngRequired
en angulaire. Cette vérification garantit que le champ est rempli avant d'être considéré comme valide. Il ne vérifie aucune donnée, il fait simplement entrer à l'utilisateur. Avoir l'attribut novalidate
signifie que le navigateur ne doit pas vérifier lors de la soumission.
propice pro: ne définissez pas les attributs
action
sur une forme angulaire. Cela empêchera Angular d'essayer de s'assurer que le formulaire n'est pas soumis de manière aller-retour.
Méthode de vérification personnalisée
Angular fournit une API étendue pour aider à créer des règles de validation personnalisées. Avec cette API, vous pouvez créer et étendre vos propres règles de validation pour des entrées complexes non couvertes dans la validation standard. Mon équipe s'appuie sur certaines méthodes de validation personnalisées pour exécuter les modèles d'expression réguliers complexes que notre serveur utilise. Sans la possibilité d'exécuter un correspondant d'expression régulière complexe, nous pouvons envoyer des données incorrectes au serveur backend. Cela montrera des erreurs à l'utilisateur, ce qui entra?nera une mauvaise expérience utilisateur. Les validateurs personnalisés utilisent la syntaxe directive et doivent être injectés ngModel
. Plus d'informations peuvent être trouvées en consultant la documentation AngularJS.
Créez le contr?leur
Maintenant, nous pouvons démarrer notre application. Vous pouvez trouver un aper?u du code du contr?leur ici.
Le contr?leur sera au c?ur des choses. Il n'a que quelques responsabilités - sa vue aura un élément de formulaire nommé parentForm
, il n'a qu'un seul attribut, et ses méthodes incluront registerFormScope
, validateChildForm
et checkout
.
Propriétés du contr?leur
Nous avons besoin d'une propriété dans le contr?leur:
<input type="text" ng-model="size" ng-required="true" novalidate> <span ng-show="myForm.size.$error.required"> Size: The value is required! </span>
Cette propriété est utilisée pour maintenir l'état booléen de la validité globale du formulaire. Nous utilisons cette propriété pour désactiver son statut après avoir cliqué sur le bouton de paiement.
Méthode: registerformScope
$scope.formsValid = false;Lorsque
est appelé, un registerFormScope
et un ID de directif unique créé dans l'instanciation d'instructions y sont transmis. Cette méthode ajoute ensuite la portée du formulaire au parent FormController
. FormController
Méthode: validatechildform
Cette méthode sera utilisée pour se coordonner avec le serveur backend qui effectue la vérification. Il est appelé lorsque l'utilisateur modifie le contenu et a besoin d'une vérification supplémentaire. Conceptuellement, nous n'autorisons pas les instructions pour effectuer une communication externe.Veuillez noter que aux fins de ce tutoriel, j'ai omis les composants backend. Au lieu de cela, je rejette ou analyse les promesses selon que le montant saisi par l'utilisateur se situe dans une plage spécifique (le produit A est 10-50 et le produit B est de 25 à 500).
$scope.registerFormScope = function (form, id) { $scope.parentForm['childForm'+id] = form; };L'utilisation du service
permet aux instructions de se conformer aux interfaces avec le succès et le statut de défaillance. La nature de l'interface d'application entre "Modifier" et "Save" dépend de l'édition des données du modèle. Il convient de noter que les données du modèle sont mises à jour immédiatement lorsque l'utilisateur commence à taper. $q
Méthode: Checkout
Cliquez sur "Découvrez" pour indiquer que l'utilisateur a terminé l'édition et souhaite la vérifier. Cet élément exploitable nécessite une vérification que tous les formulaires chargés dans la directive sont validés avant que les données du modèle puissent être envoyées au serveur. La portée de cet article n'inclut pas les méthodes d'envoi de données à un serveur. Je vous encourage à explorer en utilisant le service pour toute la communication client-serveur. $http
$scope.validateChildForm = function (form, data, product) { // 重置表單,使其不再有效 $scope.formsValid = false; var deferred = $q.defer(); // 驗證表單和數(shù)據(jù)的邏輯 // 必須在promise上返回resolve()或reject()。 $timeout(function () { if (angular.isUndefined(data.amount)) { return deferred.reject(['amount']); } if ((data.amount < product.minAmount) || (data.amount > product.maxAmount)) { return deferred.reject(['amount']); } deferred.resolve(); }); return deferred.promise; }Cette méthode utilise la capacité d'Angular et les formulaires enfants peuvent invalider le formulaire parent. La forme parent est nommée
pour illustrer clairement sa relation avec la forme enfant. Lorsque le formulaire de l'enfant utilise sa méthode parentForm
, il se réunira automatiquement vers le formulaire parent pour y régler la validité. Toutes les formes dans $setValidity
doivent être valides et leurs attributs internes parentForm
doivent être vrais. $valid
Créez notre directive
Nos instructions doivent suivre une interface commune qui permet une interopérabilité complète et une évolutivité. Le nom de nos directives dépend du produit qu'ils contiennent.Vous pouvez trouver un aper?u du code d'instructions ici (produit A) et ici (produit B).
Portée de l'instruction d'isolement
Chaque directive instanciée obtiendra une portée isolée qui est localisée dans la directive et ne possède aucune propriété externe connue. Cependant, AngularJS permet la création de directives qui utilisent des méthodes et des propriétés de portée des parents. Lorsque vous passez des propriétés externes à la portée locale, vous pouvez indiquer que vous souhaitez configurer une liaison de données bidirectionnelle.Notre application nécessitera certaines méthodes et propriétés de liaison des données bidirectionnelles externes:
$scope.checkout = function () { if($scope.parentForm.$valid) { // 連接服務器以發(fā)布數(shù)據(jù) } $scope.formsValid = $scope.parentForm.$valid; };Méthode: registerformScope
La première propriété de la portée locale de directive est la méthode pour enregistrer la portée locale.form au contr?leur. L'instruction nécessite un pipeline pour passer l'objet
local au contr?leur principal. FormController
Objet: GiftData
Il s'agit des données de modèle centralisées qui seront utilisées dans la vue d'enseignement. Ces informations seront la liaison des données bidirectionnelles pour garantir que les mises à jour survenant dans FormController
se propageront au contr?leur principal.
Méthode: validatechildform
Cette méthode est la même que celle définie dans le contr?leur. Cette méthode est appelée lorsque l'utilisateur met à jour les informations dans la vue d'instructions.
objet: produit
Cet objet contient des informations sur le produit acheté. Notre démonstration utilise un objet relativement petit avec seulement quelques propriétés. L'application réelle de mon équipe a beaucoup d'informations pour prendre des décisions dans l'application. Il est transmis dans validateChildForm
pour fournir le contexte du contenu vérifié.
lien d'instructions
Notre directive utilisera la fonction postLink
et la transmet un objet de portée. De plus, la fonction postLink
accepte également plusieurs autres paramètres. Ils sont les suivants:
-
scope
- Utilisé pour accéder à la portée d'isolement créée pour chaque instance de directive. -
iElement
- Utilisé pour accéder aux éléments des éléments. Il est s?r de mettre à jour et de modifier l'élément de la fonctionpostLink
dans l'élément auquel il est alloué. -
iAttrs
- Utilisé pour accéder aux propriétés sur la même balise de la directive d'instanciation. -
controller
- Si une dépendance externe du contr?leur existe, elle peut être utilisée dans une fonction de liaison. Ceux-ci doivent correspondre à l'attributrequire
de l'objet directif. -
transcludeFn
- Cette fonction est la même que la fonction répertoriée dans le paramètre$transclude
de l'objet d'instruction.
link
Responsable de la connexion de tous les auditeurs DOM et de la mise à jour du DOM avec des éléments de vue.
<input type="text" ng-model="size" ng-required="true" novalidate> <span ng-show="myForm.size.$error.required"> Size: The value is required! </span>
Enregistrer la portée du formulaire
$scope.formsValid = false;
Méthode d'enveloppement registerFormScope
Dans $timeout
retardera son exécution jusqu'à la fin de la pile d'exécution. Cela offre au compilateur suffisamment de temps pour compléter tous les liens nécessaires entre le contr?leur et les instructions. scope.form.fields
est un tableau, le nom de la propriété trouvée dans FormController
, qui est très important pour configurer les erreurs de vérification c?té serveur. Le but de registerFormScope
est d'envoyer FormController
au contr?leur parent, permettant à la forme nouvellement créée d'être définie sur une forme enfant de parentForm
.
Lorsque les informations de vérification changent
$scope.registerFormScope = function (form, id) { $scope.parentForm['childForm'+id] = form; };
Lorsque le formulaire change et que l'utilisateur est prêt à le vérifier, la méthode saveForm
dans la directive est appelée. Cette méthode invoquera à son tour la méthode validateChildForm
du contr?leur et passera dans FormController
, scope.giftData
et scope.product
. Le contr?leur renvoie une promesse qui sera analysée ou rejetée en fonction d'autres règles de validation.
Lorsque la promesse est rejetée, le contr?leur renverra un champ non valide. Ceci est utilisé pour invalider le formulaire (et parentForm
) et définir d'autres erreurs de niveau de champ. Dans notre démo, nous utilisons une post-vérification simple sur le champ amount
et nous ne renvoyons pas la cause de l'échec. Les refus de validateChildForm
peuvent être aussi complexes ou simples que votre application en a besoin.
Lorsque la promesse revient avec succès, la commande doit définir la validité des champs sous la forme. Le code doit également effacer toutes les erreurs de serveur précédemment identifiées. Cela garantit que la directive ne fournit pas d'erreurs à l'utilisateur incorrectement. La définition de tous les champs avec $setValidity
sera liée à parentForm
dans le contr?leur pour définir leur validité, à condition que toutes les sous-formulaires soient valides.
Définissez notre vue
La vue n'est pas très compliquée, et pour notre démonstration, nous avons simplifié le produit aux champs suivants: nom et montant. Dans la prochaine étape, nous explorerons les vues dont vous avez besoin pour remplir cette application.
Vous pouvez trouver un aper?u du code de vue ici (produit A) et ici (produit B).
Vue d'itinéraire
<input type="text" ng-model="size" ng-required="true" novalidate> <span ng-show="myForm.size.$error.required"> Size: The value is required! </span>
Cette vue est importante car elle configure le formulaire parent, qui sera utilisé pour envelopper toutes les formulaires enfants chargés à partir de la directive de produit. L'utilisation de ng-repeat
dans ng-if
garantit que le DOM n'est pas incorrectement rempli d'un FormController
inutilisé.
Vue d'instructions
$scope.formsValid = false;
Remarque: La vue ci-dessus sur la disposition de la démonstration a été tronquée à certains endroits et n'a rien à voir avec cet article.
Le ci-dessus amountInput
définit un mode de vérification qui sera appliqué par le validateur ngPattern
d'Angular. Le champ ci-dessus utilisera la directive ngDisabled
construite par Angular, qui évalue l'expression, et si elle est vraie, le champ sera désactivé.
En bas de la vue, nous affichons toutes les erreurs pour fournir des commentaires à l'utilisateur lorsque l'utilisateur clique sur le bouton "Enregistrer". Cela définira la propriété $submitted
sur la sous-forme.
Résumé
Mettez toutes les pièces ensemble et nous nous retrouvons avec les éléments suivants: (le lien de code ou l'extrait de code doit être inséré ici)
Vous pouvez également trouver tout le code sur GitHub.
Conclusion
Mon équipe a beaucoup appris lors de la création de nos dernières applications. Comprendre la relation père-fils nous permet de simplifier notre écran de commentaire. L'utilisation de directives nous permet de développer un formulaire qui peut être utilisé dans n'importe quel contexte et favorise un bon code réutilisable. La directive nous permet également de tester le code unitaire pour s'assurer que notre formulaire fonctionne comme prévu. Notre application est en production et a contribué à plus de 100 000 commandes.
J'espère que vous avez aimé lire cet article. Si vous avez des questions ou des commentaires, j'aimerais les entendre dans les commentaires ci-dessous.
FAQ pour les directives basées sur la forme dans AngularJS
Quel est le r?le des directives basées sur la forme dans AngularJS?
Les directives basées sur des formulaires dans AngularJS jouent un r?le crucial dans la gestion et la validation de la saisie des utilisateurs dans les formulaires. Ils fournissent un moyen de créer des balises HTML personnalisées qui agissent comme de nouveaux widgets personnalisés. Ils peuvent également manipuler les DOM d'une manière qui ajoute des fonctionnalités à nos applications. Ces instructions sont particulièrement utiles lorsque vous souhaitez encapsuler et réutiliser les fonctionnalités communes dans votre application.
Comment créer des directives basées sur des formulaires personnalisées dans AngularJS?
La création d'une directive basée sur des formulaires personnalisée dans AngularJS implique de définir une nouvelle directive à l'aide de la fonction .directive
. Vous devez fournir à votre directif un nom et une fonction d'usine qui générera l'objet d'option de la directive. Cet objet peut définir plusieurs propriétés, y compris restrict
, template
, scope
, link
, etc. L'option restrict
est utilisée pour spécifier comment les directives sont appelées dans HTML.
Comment vérifier l'entrée du formulaire à l'aide de la directive AngularJS?
AngularJS fournit quelques instructions intégrées pour la validation du formulaire, y compris ng-required
, ng-pattern
, ng-minlength
, ng-maxlength
, et plus encore. Ces instructions ajoutent de la validation à la saisie de votre formulaire, garantissant que la saisie de l'utilisateur répond à certains critères avant la soumission du formulaire. Vous pouvez également créer des directives de vérification personnalisées pour des exigences de vérification plus complexes.
Quel est le but du contr?leur de formulaire dans AngularJS?
FormController
Dans AngularJS fournit des méthodes pour suivre l'état des formulaires et leurs contr?les, la vérification des formulaires de validité et de réinitialisation. Il est automatiquement disponible dans la directive de formulaire et peut être injecté dans le contr?leur, d'autres directives ou services.
Comment utiliser la directive Ng-Sumit dans AngularJS?
La directive dans AngularJS vous permet de spécifier un comportement personnalisé lors de la soumission d'un formulaire. Au lieu d'écrire du code JavaScript pour gérer l'événement de soumission du formulaire à l'aide de ng-submit
. Ceci est particulièrement utile lors de la prévention du comportement de soumission de formulaire par défaut lorsque le formulaire n'est pas valide. ng-submit
La principale différence entre
et dans form
dans ng-form
est que ng-form
peut être imbriqué sous d'autres formes. Cela vous permet de regrouper les entrées pertinentes et de les valider en tant que sous-forme. D'un autre c?té, les directives standard form
ne soutiennent pas la nidification.
Comment définir la validité d'un champ de forme dans AngularJS?
Vous pouvez définir la validité des champs de formulaire dans AngularJS en utilisant la méthode ngModelController
fournie par $setValidity
. Cette méthode accepte deux paramètres: la clé de validation et la valeur booléenne. Si la valeur booléenne est fausse, la clé est ajoutée à l'objet $error
du champ.
Comment utiliser la directive Ng-Model sous forme angularjs?
La directive ng-model
dans AngularJS lie l'entrée, la sélection, la zone de texte ou le contr?le de formulaire personnalisé aux propriétés sur la portée. Il fournit une liaison de données bidirectionnelle entre le modèle et la vue. Cela signifie que toute modification du champ de saisie mettra à jour automatiquement le modèle et vice versa.
Quel est le r?le de la directive de changement NG sous forme angularjs?
La directive dans AngularJS vous permet de spécifier un comportement personnalisé lorsque l'utilisateur modifie l'entrée. Cette directive est utile lorsque vous souhaitez effectuer quelque chose immédiatement après la fin de la saisie ou de la sélection de l'utilisateur au lieu d'attendre que le formulaire soit soumis. ng-change
La création d'une directive de vérification personnalisée dans AngularJS implique de définir une nouvelle directive qui a besoin de
. Dans la fonction ngModel
de la directive, vous pouvez utiliser le pipeline link
ou ngModelController
pour ajouter une logique de validation personnalisée. $validators
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Java et JavaScript sont différents langages de programmation, chacun adapté à différents scénarios d'application. Java est utilisé pour le développement des grandes entreprises et des applications mobiles, tandis que JavaScript est principalement utilisé pour le développement de pages Web.

JavaScriptCommentsaSententialFormantaining, Reading et GuidingCodeEexecution.1) unique-linecomesaUSEUSEFORQUICKEXPLANATIONS.2) Multi-linecommentSExPlainComplexLogicorProvideTailedDocumentation.3) Inlinecomementsclarifypecifications

Les points suivants doivent être notés lors du traitement des dates et du temps dans JavaScript: 1. Il existe de nombreuses fa?ons de créer des objets de date. Il est recommandé d'utiliser les cha?nes de format ISO pour assurer la compatibilité; 2. Get and définir des informations de temps peuvent être obtenues et définir des méthodes, et notez que le mois commence à partir de 0; 3. Les dates de mise en forme manuelle nécessitent des cha?nes et les bibliothèques tierces peuvent également être utilisées; 4. Il est recommandé d'utiliser des bibliothèques qui prennent en charge les fuseaux horaires, comme Luxon. La ma?trise de ces points clés peut éviter efficacement les erreurs courantes.

PlacertagsatthebottomofablogPostorwebPageSerSpracticalPurpossForseo, userexperience, anddesign.1.ithelpswithseobyallowingsechingenginestoaccesskeyword-elevanttagswithoutcluteringtheaincontent..itimproveserexperceenceegmentyepingthefocusonThearrlUl

Javascriptispreferredforwebdevelopment, tandis que javaisbetterforlarge-scalebackenSystemsandandroidApps.1)

JavascripthSsevenfundamentalDatatypes: nombre, cha?ne, booléen, indéfini, nul, objet, andymbol.1) nombres usUseadouble-précisformat, utile

La capture d'événements et la bulle sont deux étapes de la propagation des événements dans DOM. La capture est de la couche supérieure à l'élément cible, et la bulle est de l'élément cible à la couche supérieure. 1. La capture de l'événement est implémentée en définissant le paramètre UseCapture d'AdveventListener sur true; 2. événement Bubble est le comportement par défaut, UseCapture est défini sur False ou Omise; 3. La propagation des événements peut être utilisée pour empêcher la propagation des événements; 4. événement Bubbling prend en charge la délégation d'événements pour améliorer l'efficacité du traitement du contenu dynamique; 5. La capture peut être utilisée pour intercepter les événements à l'avance, telles que la journalisation ou le traitement des erreurs. La compréhension de ces deux phases aide à contr?ler avec précision le calendrier et comment JavaScript répond aux opérations utilisateur.

Java et JavaScript sont différents langages de programmation. 1.Java est un langage typique et compilé, adapté aux applications d'entreprise et aux grands systèmes. 2. JavaScript est un type dynamique et un langage interprété, principalement utilisé pour l'interaction Web et le développement frontal.
