这是我的代码示例。
在我的情况下,切换类适用于每个li
元素
<ul class="nav nav-pills pull-right">
<li *ngFor="let x of nav" class="presentation" (click)="active = !active" [ngClass]="toggleClass()">
<a href="#">{{x.menu}} </a>
</li>
</ul>
JS
export class AppComponent {
active = false;
nav = NAVIGATION;
//Toggle Class
toggleClass(){
if(this.active){
return 'active';
} else {
return '';
}
}
答案 0 :(得分:6)
使用以下代码,您不需要编写打字稿代码,
<ul class="nav nav-pills pull-right">
<li *ngFor="let x of nav;let i=index"
class="presentation"
(click)="isClicked=i"
[class.active]="isClicked==i">
<a href="#">{{x.menu}}</a>
</li>
</ul>
答案 1 :(得分:3)
您可以制作指令并使用@HostBinding
示例
import { Directive, ElementRef, HostBinding } from '@angular/core';
@Directive({
selector: '[my-directive]'
})
export class MyDirective {
@HostBinding('class.active') isActive = false;
toggle() {
this.isActive = !this.isActive;
}
}
像这样使用:
<li [my-directive] (click)="toggle()">blah</li>
答案 2 :(得分:2)
您应该为每个项目存储活动变量,而不是整个组件存储所有li:
<li *ngFor="let x of nav" (click)="x.active = !x.active" ... >
您可以在模板中使用以下代码来显示活动类:
[class.active]="x.active"
答案 3 :(得分:1)
您必须在导航界面/类中添加active
属性:
<ul class="nav nav-pills pull-right">
<li *ngFor="let x of nav"
class="presentation"
(click)="nav.active = !nav.active"
[class.active]="nav.active"
>
<a href="#">{{x.menu}} </a>
</li>
</ul>
但是看到你正试图选择导航项目,我猜你只想选择一个。您必须将模板更改为以下内容:
<ul class="nav nav-pills pull-right">
<li *ngFor="let x of nav"
class="presentation"
(click)="active = x"
[class.active]="x === active"
>
<a href="#">{{x.menu}} </a>
</li>
</ul>
在您的组件中,您应该将active
声明从boolean
更改为导航项目类/界面/任何
答案 4 :(得分:1)
您可以将指令的HostListener用作纯
export class MyDirective {
@HostBinding('class.active') isActive = false;
@HostListener('click', ['$event'])
onClick(e) {
this.isActive = !this.isActive;
}
}
并使用html
<li [my-directive]>blah</li>