Salut, j'ai une liste non ordonnée et tous ont une classe active. Je souhaite basculer la classe active lorsque vous cliquez sur un élément de la liste. Mon code est comme ça
<ul class="sub_modules">
<li *ngFor="let subModule of subModules" class="active">
<a>{{ subModule.name }}</a>
</li>
</ul>
quelqu'un peut-il m'aider à le faire?
Vous pouvez faire quelque chose comme:
<ul class="sub_modules">
<li (click)="activateClass(subModule)"
*ngFor="let subModule of subModules"
[ngClass]="{'active': subModule.active}">
<a>{{ subModule.name }}</a>
</li>
</ul>
Sur le composant
activateClass(subModule){
subModule.active = !subModule.active;
}
Sur la classe Ng, la première propriété est la classe que vous voulez ajouter et la seconde est la condition;
faites juste une propriété d'index. utilisez let i = index
pour définir l'index à l'aide d'un événement (clic). Puis vérifiez si selectedIndex === i
si oui la classe "active" à true
<ul class="sub_modules">
<li *ngFor="let subModule of subModules; let i = index"
[class.active]="selectedIndex === i"
(click)="setIndex(i)">
<a>{{ subModule.name }}</a>
</li>
</ul>
Puis sur le fichier TypeScript: il suffit de définir selectedIndex.
export class ClassName {
sIndex: number = null;
setIndex(index: number) {
sIndex = index;
}
}
Je pense que vous pouvez trouver votre réponse ici: AngularJs - Meilleures pratiques pour l'ajout d'une classe active au clic (ng-repeat)
Vous pouvez cibler et appliquer le code CSS à un élément/objet à l'aide du code $index
d'Angular. Le post explique et démontre la logique mieux que moi.