TP 6 : Services
Objectifs
Section intitulée « Objectifs »- Utiliser un service pour obtenir des données statiques
Instructions
Section intitulée « Instructions »Étape 1 : Créer un service pour obtenir des données statiques
Section intitulée « Étape 1 : Créer un service pour obtenir des données statiques »- Tout d’abord, notre classe album doit avoir un identifiant. Ajoutons donc un identifiant à l’interface de l’album.
export interface Album { id: number; ...}- Adaptez vos composants pour que tous les albums disposent d’un ID. Assurez-vous que votre application compile toujours.
- Pour l’instant, nous utiliserons un service pour obtenir des données statiques. Nous allons créer un service qui retournera une liste d’albums.
- Nous devons également être capables de réaliser toutes les opérations CRUD sur les albums.
- Créons donc un service
AlbumStaticqui aura les méthodes suivantes :getAll(): retourne tous les albumsget(id: number): retourne l’album avec l’ID donnéadd(album: Album): ajoute un nouvel albumupdate(album: Album): met à jour un albumdelete(id: number): supprime un album
private albums: Album[] = [/*Contient des albums*/]getAll(): Album[] { return this.albums;}
update(album: Album) { const index = this.albums.findIndex(a => a.id === album.id); this.albums[index] = album;}
// Nous retournons undefined si l'album n'est pas trouvé, cela provient du fait que nous utilisons la méthode findget(id: number): Album | undefined { return this.albums.find(album => album.id === id);}// D'autres méthodes...[ASTUCE] Pour supprimer un élément d’un tableau, vous pouvez utiliser la méthode
splice.
Étape 2 : Utiliser le service dans tous les composants concernés
Section intitulée « Étape 2 : Utiliser le service dans tous les composants concernés »album-list.component.ts:
Section intitulée « album-list.component.ts: »- Injectez le service
- Remplacez le tableau albums par un tableau vide et appelez le service dans le constructeur pour obtenir les albums.
albumsService = inject(AlbumStaticService)
albums: Album[] = [];
constructor() { this.albums = this.albumService.getAll();}album-of-the-day.component.ts:
Section intitulée « album-of-the-day.component.ts: »- Ici, nous avons deux approches possibles pour obtenir un album aléatoire :
- Nous pouvons obtenir tous les albums puis en sélectionner un aléatoire dans le tableau
- Nous pouvons créer une méthode dans le service qui retournera un album aléatoire
- Utilisons la deuxième approche.
- Dans le service, créez une méthode appelée
getRandomAlbum(): Albumqui retournera un album aléatoire.
- Dans le service, créez une méthode appelée
getRandomAlbum(): Album { const index = Math.floor(Math.random() * this.albums.length); return this.albums[index];}- Nous n’avons alors pas besoin de deux variables dans le fichier
album-of-the-day.component.ts, nous pouvons simplement appeler le service pour obtenir l’album aléatoire :- Lorsque le composant se charge (utilisez le constructeur)
- Lorsque l’utilisateur clique sur le bouton pour obtenir un autre album aléatoire
export class AlbumOfTheDayComponent {
albumService = inject(AlbumStaticService)
@Output() notifyParentToClose = new EventEmitter<boolean>();
albumOfTheDay: Album
constructor() { this.changeAlbumOfTheDay() }
changeAlbumOfTheDay() { this.albumOfTheDay = this.albumService.getRandomAlbum() }
closeAlbumOfTheDay() { this.notifyParentToClose.emit(true); }}
