TP 11 : Formulaires Réactifs
Objectifs
- Créer un formulaire d'ajout d'album
Tâches
Tâche 1 : Créer le formulaire
Nous avons notre AlbumAddComponent, créons un formulaire en utilisant l'approche ReactiveForm.
-
Importer
ReactiveFormModuledans votreapp.module.ts -
Injecter
FormBuilderetAlbumService. -
Créer un
FormGroupavec tous les champs requis saufid.- Utiliser le
FormBuilderet ajouter quelques validateursrequired.
- Utiliser le
-
Créer le formulaire HTML en utilisant les attributs
FormGroupetformControlName. -
Afficher les erreurs dans le cas où certains champs sont manquants.
-
Lors de la soumission, nous voulons poster notre album dans notre API REST.
-
Une fois l'insertion terminée, nous voulons rediriger vers le détail de l'album.
[ASTUCE] N'oubliez pas de vous abonner à l'
Observablequi provient de votre service ! Vous pouvez rediriger vers la liste des albums une fois qu'il a été inséré.
Tâche 2: Afficher les détails de l'album
- Nous avons remarqué que notre album a un identifiant généré qui prend la forme d'une chaîne de caractères.
- Nous avons ensuite une erreur si nous essayons de naviguer vers le nouvel élément en utilisant les boutons élément précédent ou suivant dans le
AlbumDetailComponent. - Normalement, nous créerions une méthode backend pour nous donner l'album suivant ou précédent, mais nous n'avons pas une telle fonctionnalité. Nous devons trouver une stratégie pour le faire par nous-mêmes!
Stratégie :
- Lorsque nous récupérons nos albums, nous pouvons définir un tableau avec tous les IDs afin que nous puissions utiliser cela pour savoir où naviguer en premier. Vous pourriez également définir tous les albums dans un tableau, mais utiliser la stratégie ID nous permettrait de toujours récupérer la dernière version de notre objet.
album.service.ts
- Ajouter
ids: string[] = []; - Modifier l'
iddansalbum.model.tspour qu'il soit unestring. - Vous devrez corriger les erreurs dans votre
album-static.service.ts. - Modifier maintenant notre méthode
getAllpour qu'elle puisse stocker tous les ids dans un tableau.
getAll(): Observable<Album[]>{
return this.http.get<Album[]>(this.serverUrl).pipe(
map(albums => {
this.ids = albums.map(a => a.id);
return albums;
})
);
}
- Ajouter les méthodes
nextIdetprevId
// Exemple avec nextId
nextId(id: string): string{
const index = this.ids.indexOf(id);
if (index === this.ids.length - 1){
return this.ids[0];
}
return this.ids[index + 1];
}
Vous aurez également besoin de modifier les paramètres dans toutes les méthodes de numéro à chaîne.
// exemple:
get(id: string): Observable<Album>{
album-detail.component.ts
- Dans le
ngOnInit, charger tous les ids des albums s'ils ne sont pas déjà chargés.
if(this.albumService.ids.length === 0){
this.albumService.getAll().subscribe()
}
- Plus tard dans le code, changer le cast de Number à String.
- Appeler les nouvelles méthodes.