TP 3 : Directives (ngIf & ngFor)
Objectifs
- Utiliser les directives ngIf et ngFor d'Angular
Instructions
Étape 1 - Directive ngIf
- Dans le composant
app.component.ts, créez une variable appeléeshowAlbumOfTheDayet assignez-lui la valeurtrue.- Au-dessus de l'affichage de
albumOfTheDay, ajoutez un bouton qui basculera la variableshowAlbumOfTheDaydetrueàfalseet vice versa. - Il affichera "Cacher" si
showAlbumOfTheDayest vrai et "Afficher" si c'est faux.
- Au-dessus de l'affichage de
- Utilisez la directive
ngIfpour afficheralbumOfTheDayseulement si la variableshowAlbumOfTheDayest vraie.
Étape 2 - Directive ngFor
- Créez un nouveau composant appelé
album-listet affichez la liste des albums dans le fichierapp.component.html, au-dessus du composantalbum-of-the-day. - Dans le composant
album-list, créez une variable appeléealbumset assignez-y un tableau d'objets qui respectent l'interface Album. - Utilisez la directive
ngForpour afficher la liste des albums dans le composantalbum-list.
À ce niveau, app.component.html devrait ressembler à quelque chose comme :
<app-albums-list />
<a class="link" (click)="showAlbumOfTheDay = !showAlbumOfTheDay">{{showAlbumOfTheDay ? 'Cacher' : 'Afficher' }} l'album du jour</a>
<app-album-of-the-day *ngIf="showAlbumOfTheDay"></app-album-of-the-day>
Instructions - Étape 2
Il est également possible d'itérer sur une liste d'éléments qui proviendraient d'une fonction. Créons une fonction qui retournera la liste des albums basés sur un terme de recherche.
Déplacer le formulaire de recherche
- Déplacez le formulaire de recherche de
app.component.htmlau composantalbum-list.
[astuce] N'oubliez pas de déplacer la variable
searchTermau composantalbum-list.
Utiliser un filtre pour filtrer les albums existants
- Dans le composant
album-list, créez une méthode appeléealbumsFilteredqui retournera les albums filtrés basés sur la variablesearchTerm. - Utilisez la méthode
albumsFilteredpour filtrer les albums affichés dans le composantalbum-list.
[ASTUCE] Voici un exemple de comment cela peut se faire
albumsFiltered(): Album[] {
return this.albums.filter(album => {
return album.title.toLowerCase().includes(this.searchTerm.toLowerCase())
})
}
<li *ngFor="let album of albumsFiltered()">{{ album.title }}</li>
Ressources
