17-1 Base du formulaire de création
Commençons par le formulaire permettant de créer un nouveau projet. Nous avons déjà un composant appelé ProjetCreer que nous allons utiliser pour y insérer le formulaire.
Décrire la structure du formulaire à l'aide d'un FormGroup
La première étape est de préciser, au niveau du composant, le formulaire et ses champs. C'est ce qui permettra de lier le gabarit (HTML) à la logique.
FormGroup est un objet Angular permettant de décrire un formulaire, de contenir les valeurs du formulaire et de faire le lien entre le code de la classe et le gabarit.
FormGroup contient plusieurs FormControl qui représentent des champs (ex.: input) du formulaire;
-
Dans la page de création de projet, ajoutez une variable
projetFormqui instancie une classeFormGroupsrc/app/features/projets/pages/projet-creer.tsexport class ProjetCreer {
projetForm = new FormGroup({
});
}infoFormGroupDéfinis un formulaire et vous devrez ajouter l'importation! -
Ajoutons deux
FormControl: un pour le nom et un pour la description du projet.src/app/pages/projets/projet-creer.page.tsexport class ProjetCreer {
projetForm = new FormGroup({
nom: new FormControl(''),
description: new FormControl(''),
});
}infoFormControlDéfinis un champ de formulaire.La valeur passée en argument est la valeur par défaut du champ. Ici, on veut des champs vides.
Créer le gabarit HTML du formulaire
-
Dans la page de création, ajoutons une balise
formqui contiendra le formulaire et les différents champs (nom et description pour commencer).src/app/features/projets/pages/projet-creer.ts@Component({
selector: 'app-projet-creer',
imports: [],
template: `
<div class="row">
<div class="col-lg-6 offset-lg-3">
<h1>Créer un nouveau projet</h1>
<form>
</form>
</div>
</div>
`,
styles: ``
})infoJ'en ai profité pour créer un gabarit dans lequel le contenu sera centré dans l'écran, avec une largeur de 6 colonnes.
-
<div class="row">ajoute une rangée bootstrap -
<div class="col-lg-6 offset-lg-3">défini une colonne de 6 de large, décalée de 3 colonnes (donc centré dans la page) -
formétant la balise qui contiendra le formulaire et les champs
Comme le formulaire est petit, s'il prenait toute la largeur de la page ce serait étrange, c'est pourquoi on le limite en largeur ici.
-
-
Ajouter un
inputpour le nomsrc/app/features/projets/pages/projet-creer.ts@Component({
selector: 'app-projet-creer',
imports: [],
template: `
<div class="row">
<div class="col-lg-6 offset-lg-3">
<h1>Créer un nouveau projet</h1>
<form>
<div class="form-floating mb-3">
<input type="text" class="form-control" id="projetNom" placeholder="Nom">
<label for="projetNom">Nom</label>
</div>
</form>
</div>
</div>
`,
styles: ``
})infoUn
inputet unlabelsont simplement ajoutés dans undivavec la classeform-floatingafin de profiter des libellés flottants de Bootstrap.http://localhost:4200/projets/creer
-
Ajouter un
textareapour la description et un boutonsubmitpour l'envoi du formulairesrc/app/pages/projets/projet-creer.page.ts@Component({
selector: 'app-projet-creer',
imports: [],
template: `
<div class="row">
<div class="col-lg-6 offset-lg-3">
<h1>Créer un nouveau projet</h1>
<form>
<div class="form-floating mb-3">
<input type="text" class="form-control" id="projetNom" placeholder="Nom">
<label for="projetNom">Nom</label>
</div>
<div class="form-floating mb-3">
<textarea class="form-control" placeholder="Description" id="projetDescription"></textarea>
<label for="projetDescription">Description</label>
</div>
<button type="submit" class="btn btn-primary">Soumettre</button>
</form>
</div>
</div>
`,
styles: ``
})
Vous devriez maintenant avoir un visuel de formulaire ressemblant à ceci:
