ngModel permet de créer des liaisons de données bidirectionnelles pour la lecture et l'écriture de valeurs de contrôle d'entrée.CSS spéciales qui suivent l'état des contrôles.HTML à l'aide de variables de référence de modèle.

Heroclasse de modèle.ngModel de liaison de données bidirectionnelle.name à chaque contrôle de saisie de formulaire.CSS personnalisés pour fournir un retour visuel.ngSubmit.angular-forms :Heroclasse avec ses trois champs obligatoires (id, name, power) et un champ facultatif (alterEgo).ng generate class, générez une nouvelle classe nommée Hero :TypeScript génère un champ public pour chaque paramètre public du constructor et affecte automatiquement la
valeur du paramètre à ce champ lorsque vous créez des hero.alterEgo est optionnel, le constructor vous permet donc de l'omettre; notez le point d'interrogation (?) dans alterEgo?.HTML et une classe de composants pour gérer les interactions de
données et utilisateur par programme. Commencez par le cours, car il indique brièvement ce que l'éditeur de héros peut faire.ng generate component, générez un nouveau composant nommé HeroForm :HeroModel que vous venez de créer.app-hero-form " du sélecteur @Component signifie que vous pouvez déposer ce formulaire dans un modèle parent avec une balise ‹app-hero-form›.templateUrl pointe sur un fichier séparé pour le modèle HTML.model et powers comme il convient pour une démonstration.JSON du modèle.
Cela vous aidera à voir ce que vous faites pendant le développement.app.module.ts définit le module racine de l'application.
Vous y identifiez les modules externes que vous utiliserez dans l'application et déclarerez les composants
qui appartiennent à ce module, tels que le HeroFormComponent.FormsModule à la matrice
de imports pour le module d'application avant de pouvoir utiliser des formulaires.FormsModule.FormsModule à la liste de imports définie dans le décorateur @NgModule.
Cela donne à l'application un accès à toutes les fonctionnalités des formulaires basés sur des modèles, y compris ngModel.
directive ou pipe appartient à un module dans le tableau imports,
ne pas le re-déclarer dans le tableau declarations. Si vous l'avez écrit et il devrait appartenir à ce module,
ne le déclarer pas dans le tableau de declarations.AppComponent est le composant racine de l'application.
Il va accueillir le nouveau HeroFormComponent.selector du composant.
Cela affiche la forme du héros lorsque le composant d'application est chargé. N'oubliez pas de supprimer également le champ name du corps de la classe.HTML5. Vous présentez deux des champs Hero, name et alterEgo, et les ouvrir pour l'entrée de l'utilisateur dans des boîtes d'entrée.
Le contrôle ‹input› Name a l'attribut required en HTML5.
Le contrôle ‹input› AlterEgo ne le fait pas car alterEgo est optionnel.
Vous avez ajouté un bouton submit en bas avec quelques classes pour le style.
Vous n'utilisez pas encore Angular. Il n'y a pas de liaisons ou de directives supplémentaires, juste une mise en page.
Dans les formulaires basés sur des modèles, si vous avez importé FormsModule, vous n'avez rien à faire avec la balise ‹form› pour pouvoir l'utiliser FormsModule.
Continuez pour voir comment cela fonctionne.
Angular ne fait aucune utilisation des container, form-group, form-control et les btnclasses ou les styles d'une bibliothèque externe.
Les applications Angulare peuvent utiliser n'importe quelle bibliothèque CSS ou aucune.styles.css et ajoutez la ligne d'importation suivante en haut :select au formulaire et lier les options à la liste powers en utilisant ngFor.AlterEgo :‹option› pour chaque pouvoir de la liste des pouvoirs.
La variable pow d'entrée modèle est une puissance différente à chaque itération; vous affichez son nom en utilisant la syntaxe d'interpolation.
[(ngModel)],
ce qui facilite la liaison du formulaire au modèle.‹input› de name et mettez-la à jour comme ceci :[(ngModel)]="..."‹form› balise avec comme suit : #heroForm="ngForm"heroForm est maintenant une référence à la directive NgForm qui régit le formulaire dans son ensemble.NgForm complète l'élément form avec des fonctionnalités supplémentaires.
Il contient les contrôles que vous avez créés pour les éléments avec une directive ngModel et un attribut name et surveille leurs propriétés,
y compris leur validité. Il possède également sa propre propriété valid, qui n'est vraie que si chaque contrôle contenu est valide.Name, ajouter et à supprimer des caractères,
vous les verrez apparaître et disparaître du texte interpolé, à un moment donné, cela pourrait ressembler à ceci :
name à la balise ‹input› et que vous l'avez défini sur "name",
ce qui a du sens pour le nom du héro. Toute valeur unique fera l'affaire, mais utiliser un nom descriptif est utile.
Définir un attribut name est une exigence lorsqu'on l'utilise en combinaison avec un formulaire [(ngModel)]FormControl et les enregistre avec une directive NgForm attachée par Angular à la balise ‹form›.
Chaque FormControl est enregistré sous le nom que vous avez attribué à l'attribut name.[(ngModel)] et des attributs name similaires à AlterEgo et à Power.
Vous allez abandonner le message de liaison de la zone de saisie et ajouter une nouvelle liaison (en haut) à la propriété diagnostic du composant.
Vous pouvez ensuite confirmer que la liaison de données bidirectionnelle fonctionne pour le modèle de héros entier.id utilisée par l'attribut de l'élément label pour faire correspondre l'étiquette à son contrôle d'entrée.name requise par les formulaires Angular pour enregistrer le contrôle avec le formulaire.
ngModel dans un formulaire vous offre plus qu'une simple liaison de données bidirectionnelle.
Il vous indique également si l'utilisateur a touché le contrôle, si la valeur a changé ou si la valeur est devenue invalide.NgModel ne fait pas que suivre l'état; il met à jour le contrôle avec des classes CSS Angular spéciales qui reflètent l'état.
Vous pouvez utiliser ces noms de classe pour modifier l'apparence du contrôle.| Etat | Classe si vrai | Classe si faux |
|---|---|---|
| Le contrôle a été visité. | ng-touched |
ng-untouched |
| La valeur du contrôle a changé. | ng-dirty |
ng-pristine |
| La valeur du contrôle est valide. | ng-valid |
ng-invalid |
spy à la balise name de ‹input› et utilisez-la pour
afficher les classes CSS de l'entrée.
name. Suivez ces étapes avec précision :name, puis cliquez en dehors de celle-ci.

ng-valid / ng-invalid est la plus intéressante, car vous souhaitez envoyer un signal visuel fort lorsque les valeurs ne sont pas valides.

forms.css que vous ajoutez au projet en tant que frère de index.html :‹head› de index.html pour inclure cette feuille de style:Name est obligatoire et effacée, la barre devient rouge.
Cela signifie que quelque chose ne va pas, mais que l'utilisateur ne sait pas ce qui ne va pas ou quoi faire.
Utilisez l'état du contrôle pour révéler un message utile.name, le formulaire doit ressembler à ceci:
‹input› avec les éléments suivants :‹div›, que vous n'afficherez que si le contrôle est invalide.name et lui avez donné la valeur ngModel.name à la
propriété de l'élément ‹div› de message hidden.pristine, vous masquerez le message uniquement lorsque la valeur est valide.
Si vous arrivez dans ce composant avec un nouveau hero (vierge) ou un hero invalide, le message d'erreur
s'affiche immédiatement avant que vous n'ayez rien fait.hero au formulaire. AlterEgo est facultatif, vous pouvez donc le laisser.heros sous cette forme.
Placez un bouton "New Hero" au bas de la fiche et liez son événement click à une méthode newHero() de composant.name et power.
C'est compréhensible car ce sont des champs obligatoires.
Les messages d'erreur sont masqués car le formulaire est vierge. reset() du formulaire après avoir appelé la méthode newHero().type="submit" ).ngSubmit du formulaire à la méthode onSubmit() du composant de formulaire hero :#heroForm et l'aviez initialisée avec la valeur " ngForm ".
Maintenant, utilisez cette variable pour accéder au formulaire avec le bouton "submit".heroForm de la propriété disabled du bouton à l'aide d'une liaison d'événement.
Voici le code :‹div› et lier sa propriété hidden à la propriété HeroFormComponent.submitted.submitted est false jusqu'à ce que vous le soumettiez.submitted devient true et le formulaire disparaît comme prévu.HTML suivant sous le ‹div› wrapper que vous venez d'écrire :‹div› n'apparaît que lorsque le composant est à l'état soumis.
Le code HTML comprend un bouton "Modifier" dont l'événement click est lié à une expression qui supprime l'indicateur submitted.
Lorsque vous cliquez sur le bouton "Modifier", ce bloc disparaît et le formulaire modifiable réapparaît.HTML Angular.@Component.NgForm.ngSubmit.#heroForm et #name.[(ngModel)] syntaxe pour la liaison de données bidirectionnelle.name pour la validation et le suivi des modifications d'éléments de formulaire.NgForm.CSS personnalisées fournissant aux utilisateurs un retour visuel sur les contrôles non valides.