ReactiveFormsModule
du paquetage @angular/forms
et ajoutez-les au tableau imports de votre NgModule
.FormControl
est l'élément de base lors de l'utilisation de formes réactives.
Pour inscrire un contrôle de formulaire, importez la classe FormControl
dans votre composant et créez une nouvelle instance du
contrôle de formulaire à enregistrer en tant que propriété de classe.FormControl
pour définir sa valeur initiale, qui dans ce cas est une chaîne vide.
En créant ces contrôles dans votre classe de composant, vous obtenez un accès immédiat pour écouter,
mettre à jour et valider l'état de l'entrée de formulaire.formControl
.valueChanges
observable, vous pouvez écouter les modifications de la valeur de la fiche dans le modèle à
l'aide d'AsyncPipe
ou dans la classe de composant à l'aide de la méthode subscribe()
.
value
qui vous donne un instantané de la valeur actuelle.AbstractControl
sous-jacente permettent de contrôler l'état du formulaire et de déterminer quand afficher
les messages lors du traitement de la validation.setValue()
qui met à jour la valeur
du contrôle de formulaire et valide la structure de la valeur fournie par rapport à la structure du contrôle.setValue()
pour mettre à jour
le contrôle avec sa nouvelle valeur, en remplaçant entièrement l'ancienne valeur.Nancy
à l'aide de la méthode setValue()
.setValue()
avec un groupe de formulaires ou une instance de tableau de formulaires,
la valeur doit correspondre à la structure du groupe ou du tableau.FormGroup
et FormControl
depuis le package @angular/forms
.profileForm
et définissez-la sur une nouvelle instance de FormGroup
.
Pour le profileForm
, ajoutez deux instances de contrôle de formulaire avec les noms firstName
et lastName
.FormGroup
fournit sa valeur de modèle sous forme d'objet réduit à partir des valeurs de chaque contrôle du groupe.
Une instance de groupe de formulaires a les mêmes propriétés (telles que value
et untouched
) et les mêmes méthodes
(telles que setValue()
) que les instances de contrôle de formulaire.
FormGroup
est lié à l'élément form
contenant la directive FormGroup
,
créant ainsi une couche de communication entre le modèle et le formulaire contenant les entrées. L'entrée formControlName
fournie par la directive FormControlName
lie chaque
entrée individuelle au contrôle de formulaire défini dans FormGroup
. Les contrôles de formulaire communiquent avec leurs éléments respectifs.
ProfileEditor
accepte les entrées de l'utilisateur, mais dans un scénario réel, vous souhaitez capturer la valeur du formulaire et le rendre disponible
pour un traitement ultérieur en dehors du composant. La directive FormGroup
écoute l'événement "submit
" émis par l'élément "form
" et émet un événement "ngSubmit
" que vous pouvez
lier à une fonction de rappel.ngSubmit
à la balise form
avec la méthode onSubmit()
de rappel.onSubmit()
dans le composant ProfileEditor
capture la valeur actuelle de profileForm
.
Utilisez cette option EventEmitter
pour conserver le formulaire encapsulé et pour fournir la valeur de formulaire en dehors du composant.console.warn
pour consigner un message dans la console du navigateur.submit
" est émis par la balise form
à l'aide de l'événement DOM
natif.
Vous déclenchez l'événement en cliquant sur un bouton de type "submit
" (cela permet à l'utilisateur d'appuyer sur la touche "Entrée" pour soumettre le formulaire).button
pour l'ajouter en bas du formulaire afin de déclencher la soumission du formulaire.profileForm
n'est pas valide.
Vous n'effectuez aucune validation pour le moment, le bouton est toujours activé.ProfileEditorcomposant
contenant le formulaire, ajoutez-le à un modèle de composant.ProfileEditor
vous permet de gérer les instances de contrôle de formulaire pour les contrôles firstName
et lastName
au sein de l'instance de groupe de formulaires.
profileForm
, ajoutez un ément "address
" imbriqué à l'instance de groupe de formulaires.
address
" à la vue contenant les champs firstName
et lastName
.ProfileEditor
est affiché en tant que groupe, mais le modèle est décomposé pour représenter les zones de regroupement logique.value
et JsonPipe
.
setValue()
pour définir une nouvelle valeur pour un contrôle individuel. La méthode setValue()
remplace la valeur entière du contrôle.patchValue()
pour remplacer les propriétés définies dans l'objet qui ont été modifiées dans le modèle de formulaire.setValue()
aident à détecter les erreurs d'imbrication dans les formulaires complexes,
tandis que patchValue()
échoue silencieusement pour ces erreurs.ProfileEditorComponent
, utilisez la méthode updateProfile
avec l'exemple ci-dessous
pour mettre à jour firstName
et adress
de l'utilisateur.profileForm
est mis à jour avec les nouvelles valeurs de "firstName
" et "street
".
street
est fourni dans un objet à l'intérieur de la propriété address
.
Cela est nécessaire car la méthode patchValue()
applique la mise à jour à la structure du modèle.
PatchValue()
met à jour uniquement les propriétés définies par le modèle de formulaire.FormBuilder
fournit des méthodes pratiques pour générer des contrôles.ProfileEditor
pour qu'il utilise le service de générateur de formulaire afin de créer
des instances de contrôle de formulaire et de groupe de formulaires.FormBuilder
du package @angular/forms
.FormBuilder
est un fournisseur de solutions injectables doté du module de formulaires réactifs.
Injectez cette dépendance en l'ajoutant au constructeur du composant.FormBuilder
a trois méthodes: control()
, group()
et array()
.
Il s'agit de méthodes permettant de générer des instances dans vos classes de composant, notamment des contrôles de formulaire,
des groupes de formulaires et des tableaux de formulaires.group()
pour créer les contrôles profileForm
.group()
avec le même objet pour définir les propriétés du modèle.
La valeur de chaque nom de contrôle est un tableau contenant la valeur initiale en tant que premier élément du tableau.sync
et async
en tant que deuxième et troisième éléments du tableau.profil.component.ts (instances)
éditeur de profil.component.ts (constructeur de formulaire)
null
basé sur le contrôle de validation.Validators
du package @angular/forms
.firstName
.ProfileEditor
, ajoutez la méthode Validators.required
statique en tant que deuxième élément du tableau pour le contrôle firstName
.required
à l'élément firstName
.
status
actuel de l'instance de groupe de formulaires via sa propriété status
.profileForm
de l'interpolation.submit
" est désactivé car profileForm
n'est pas valide en raison du contrôle firstName
de formulaire qui est requis.
Une fois le firstName
complétée, le formulaire devient valide et le bouton "submit
" est activé.FormArray
est une alternative à la gestion FormGroup
d'un nombre quelconque de contrôles non nommés.
Comme pour les instances de groupe de formulaires, vous pouvez insérer et supprimer de manière dynamique des contrôles dans des instances de tableau de formulaire.
La valeur et l'état de validation de l'instance de tableau de formulaire sont calculés à partir de ses contrôles enfants.
Toutefois, il n'est pas nécessaire de définir une clé pour chaque contrôle par nom.
Il s'agit donc d'une excellente option si vous ne connaissez pas le nombre de valeurs enfant à l'avance.
L'exemple suivant vous montre comment gérer un tableau d'alias dans ProfileEditor
.
FormArray
du package @angular/forms
à utiliser pour les informations de type.
Le service FormBuilder
est prêt à créer une instance FormArray
.
profileForm
.FormBuilder.array()
pour définir le tableau et la méthode FormBuilder.control()
pour remplir le tableau avec un contrôle initial.getter
fournit un accès facile aux alias dans l'instance de tableau de formulaires, par opposition à la répétition de la méthode profileForm.get()
pour obtenir chaque instance.
L'instance de tableau de formulaire représente un nombre indéfini de contrôles dans un tableau.
Il est pratique d'accéder à un contrôle via un getter
, et cette approche est facile à répéter pour des contrôles supplémentaires.AbstractControl
, vous devez fournir un type explicite pour accéder à la syntaxe de la méthode
pour l'instance de tableau de formulaire.FormArray.push()
insère le contrôle en tant que nouvel élément du tableau.formGroupName
fournie par FormGroupNameDirective
, formArrayName
lie la communication de l'instance de tableau de formulaire au modèle avec FormArrayNameDirective
.status
et de la valeur du contrôle racine.