I wanted the category I clicked on to activate. Then I added “all categories” list element and had problem. It didn’t activate when I clicked on it.
What I’ve tried:
- I added the “clearCurrentBrand” function to clear the “currentBrand” object when I clicked on “All Brand”. I did the cleanup by defining a fake object. Then I put this object as a condition in the “getAllBrandClass” function. But it didn’t work.
I have added the codes below. I’m waiting for your help.
brand.component.html
<ul *ngIf="dataLoaded==true" class="list-group"> <li (click)="setCurrentAllBrand()" routerLink="/cars" [class]="getAllBrandClass()">All Brands</li> <li [class]="getCurrentBrandClass(brand)" (click)="setCurrentBrand(brand)" routerLink="/cars/brand/{{brand.brandId}}" *ngFor="let brand of brands">{{brand.brandName}} </li> </ul>
brand.component.ts
setCurrentBrand(brand: Brand){ this.currentBrand = brand; } setCurrentAllBrand(){ this.currentBrand = {brandId:0, brandName:"all"} } getCurrentBrandClass(brand: Brand){ if (brand == this.currentBrand) { return "list-group-item active"; } else{ return "list-group-item"; } } getAllBrandClass(){ if (!this.currentBrand || this.currentBrand == {brandId:0, brandName:"all"}) { return "list-group-item active"; } else { return "list-group-item"; } } clearCurrentBrand(){ this.currentBrand = {brandId:0, brandName:''} }
Advertisement
Answer
Actually you can accomplish all that without any of the .ts
code. The beauty of angular 🙂
In brand.component.ts, set currentBrand
currentBrand: any brands: any
Then in your HTML
<ul *ngIf="dataLoaded==true" class="list-group"> <li (click)="currentBrand=null" routerLink="/cars" class="list-group-item" [ngClass]="{'active': !currentBrand}">All Brands</li> <li class="list-group-item" [ngClass]="{'active': currentBrand === brand}" (click)="currentBrand = brand" routerLink="/cars/brand/{{brand.brandId}}" *ngFor="let brand of brands">{{brand.brandName}} </li> </ul>