La version angulaire est 7 et je veux ajouter une classe active au lien cliqué. Ici, le lien est la navigation old school (ID de la cuvette de routage).
Mon code HTML suit comme ci-dessous:
<div class="sidenav-container">
<div class="list">
<mat-list role="list">
<mat-list-item role="listitem"
><a
routerLink="./"
fragment="report"
>1. Report</a
></mat-list-item
>
<mat-list-item role="listitem"
><a
routerLink="./"
fragment="profile"
>2. Profile</a
>
</mat-list-item>
</mat-list>
</div>
</div>
Et mon fichier css ressemble à ci-dessous:
.active {
color: green;
font-weight: 900;
}
En angular, nous ajoutons une routerLinkActive
directive pour ajouter une classe css (disons une classe active) au lien. Cette directive ajoutera une classe active au lien particulier lorsqu'il est actif. Mais les fragments ne seront pas comptés pour ce scénario.
Pour rectifier ce problème, si vous utilisez la version 7.2.4 du routeur, nous pouvons résoudre facilement avec le code suivant [routerLinkActiveOptions]="{ exact: true }"
Ensuite, le code d'origine ressemblera à celui ci-dessous:
<div class="sidenav-container">
<div class="list">
<mat-list role="list">
<mat-list-item role="listitem"
><a
routerLink="./"
fragment="report"
routerLinkActive="active"
[routerLinkActiveOptions]="{ exact: true }"
>1. Report</a
></mat-list-item
>
<mat-list-item role="listitem"
><a
routerLink="./"
routerLinkActive="active"
fragment="profile"
[routerLinkActiveOptions]="{ exact: true }"
>2. Profile</a
>
</mat-list-item>
</mat-list>
</div>
</div>
Si la version du routeur est inférieure à 7.2.4, nous devons utiliser l'approche ci-dessous pour résoudre ce problème.
Injecter ActivatedRoute
le componnet
le code ressemblera à ceci:
import { ActivatedRoute } from '@angular/router';
import { share } from 'rxjs/operators';
activeFragment = this.route.fragment.pipe(share());
constructor(public route: ActivatedRoute) {}
Ensuite, nous devons ajouter la classe ci-dessous au modèle HTML.
[class.active]="(activeFragment | async) === 'report'"
Le code complet en HTML ressemblera à ce qui suit:
<div class="sidenav-container">
<div class="list">
<mat-list role="list">
<mat-list-item role="listitem"
><a
routerLink="./"
fragment="report"
[class.active]="(activeFragment | async) === 'report'"
>1. Report</a
></mat-list-item
>
<mat-list-item role="listitem"
><a
routerLink="./"
fragment="profile"
[class.active]="(activeFragment | async) === 'profile'"
>2. Profile</a
>
</mat-list-item>
</mat-list>
</div>
</div>
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots