8-9 Liens de navigation
Nous avons vu comment faire un lien vers une autre page à l'aide du routerLink
et de RouterOutlet
. De plus, nous pouvons utiliser les concepts appris dans le but d'ajouter un lien dans la barre de navigation.
Il serait bien de pouvoir contrôler le style d'un lien lorsque ce dernier est actif et lorsqu'il ne l'est pas.
Ajouter un lien Projets
à la navbar
Bien que la page d'accueil soit en quelque sorte la page des projets, ne laissons pas place à l'ambiguïté et ajoutons un lien vers la page Projets
. De plus, si jamais l'application devait à avoir d'autres éléments de navigation, il serait logique d'avoir un lien "Projets" permettant de revenir à la liste de tous les projets.
@Component({
selector: 'app-navbar',
imports: [
RouterLink
],
template: `
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-dark bg-dark border-bottom mb-4">
<div class="container-fluid">
<a class="navbar-brand" routerLink="">Houdini</a>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto">
<li class="nav-item">
<a class="nav-link" routerLink="/projets">Projets</a>
</li>
</ul>
</div>
</div>
</nav>
`,
styles: ``
})
Nous n'avions pas de bloc de navigation et liste d'items de menu, c'est pourquoi un div
contenant une liste navbar-nav
a été ajouté.
Les classes de menu sont celles suggérées par la documentation de Bootstrap.
Lien de menu active
Bootstrap offre une classe active
qu'il est possible de mettre sur un lien nav-link
afin de lui donner le style de lien actif.
Or, en ce moment, le lien "Projets" sur la page d'accueil est grisé alors qu'il devrait être en surbrillance (puisqu'on est sur la page de liste de projets!)

Il devrait en effet plus avoir l'air de ceci:

Utilisation de la directive routerLinkActive
Angular propose une directive appelée routerLinkActive
qui permet d'ajouter automatiquement une certaine classe à un élément lorsque la route active (le chemin de la page courante) correspond au lien routerLink
de l'élément.
Par exemple, vous pouvez modifier le lien pour ceci:
//...
<li class="nav-item">
<a class="nav-link" routerLink="/projets" routerLinkActive="active">Projets</a>
</li>
//...
routerLinkActive="active"
ajoute automatiquement la classe CSS active
à l'élément si le chemin de la page courante contient /projets
.
Vous pouvez constater dans le HTML généré que la classe CSS active se retrouve sur l'élément de menu sans que vous l'ayez manuellement ajouté!