javascript - Cum să schimb culoarea de fundal atunci când dau clic pe un <li> în Angular?
Am un fel de meniu lateral. Așa:
Projects:
All
project1
project2
Când fac clic pe un element, vreau să-i schimb culoarea de fundal. (de la negru la verde).
Projects:
All
project1 // This was clicked and I want to be GREEN
project2
Dar, ceea ce am făcut până acum a fost să schimb culoarea pentru toate proiectele când am dat clic pe un proiect. Acum toate sunt verzi. Nu știu cum să fac asta pentru un element anume.
<div class="container">
<h5>Projects: </h5>
<div class="container-fluid">
<ul class="nav navbar-nav side-nav">
<li routerLinkActive="active" class="nav-item">
<a (click)="activeProject()" [ngStyle]="{'background-color':isActiveProject? 'green' : 'white' }" routerLink="/tasks" href="#">All</a>
</li>
</ul>
<ul class="nav navbar-nav side-nav" *ngFor="let project of projects">
<li routerLinkActive="active" class="nav-item" >
<a (click)="activeProject()" [ngStyle]="{'background-color':isActiveProject? 'green' : 'white' }" [routerLink]="['/tasks/project/', project.projectId]" href="#">{{project.projectName}}</a>
</li>
</ul>
</div>
</div>
În componentă:
isActiveProject: boolean;
activeProject() {
this.isActiveProject = true;
}
Presupun că această metodă de proiect activ se aplică tuturor elementelor li și rămâne activă când a fost setată pe adevărat.
Răspuns #1
Văd că aveți un routerLinkActive="active", acesta ar trebui să seteze clasa active pe elementul li. Apoi, în CSS-ul dvs., puteți face:
li.nav-item.active { background: green; }
Este posibil să fie nevoie să setezi [routerLinkActiveOptions]="{exact: true}" pentru rutare exactă și evidențiere.
Atunci poți scăpa de isActiveProject pentru schimbarea culorii de fundal și de ngStyle.
Răspunsul #2
Trebuie să stocați indexul proiectului activ și să îl comparați cu elementul din bucla ngFor:
Componentă :
public activeProjectIndex: number;
public activeProject(index: number): void {
this.activeProjectIndex = index;
}
HTML :
<ul class="nav navbar-nav side-nav" *ngFor="let project of projects; let i = index">
<li routerLinkActive="active" class="nav-item" >
<a (click)="activeProject(i)" [ngStyle]="{'background-color': activeProjectIndex === i ? 'green' : 'white' }" [routerLink]="['/tasks/project/', project.projectId]" href="#">{{project.projectName}}</a>
</li>
</ul>
