2017-05-31 20 views
2

嗨我有無序列表,他們都有活躍的類。點擊任何列表項時,我想切換活動類。我的代碼是這樣的給予積極的課onclick在ngFor角2

<ul class="sub_modules"> 
    <li *ngFor="let subModule of subModules" class="active"> 
    <a>{{ subModule.name }}</a> 
    </li> 
</ul> 

任何人都可以幫助我做到這一點?

回答

3

你可以這樣做:

<ul class="sub_modules"> 
    <li (click)="activateClass(subModule)" 
     *ngFor="let subModule of subModules" 
     [ngClass]="{'active': subModule.active}"> 
    <a>{{ subModule.name }}</a> 
    </li> 
</ul> 

上的分量

activateClass(subModule){ 
    subModule.active = !subModule.active;  
} 

在伍類的第一屬性是你想添加第二個是條件類;

+0

謝謝@Eduardo ..這是我想要的,但所有列表項目應該已經是活躍的課程..所以我該怎麼做? –

+0

你可以做一個映射到數組。 array.map(obj => { obj.active = false; return obj; }) –

+1

非常感謝。我做了obj.active = true ...這是我想要的)它完美的工作) –

2

只是做一個索引屬性。使用let i = index使用(單擊)事件設置索引。然後檢查是否selectedIndex === i如果是集合類「主動」爲真

<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> 

然後在打字稿文件:只需將selectedIndex。

export class ClassName { 
    sIndex: number = null; 

    setIndex(index: number) { 
     sIndex = index; 
    } 
} 
+0

你有一個錯誤在你的HTML塊。 '[class.active] ='sIndex === i''而不是'[class.active] ='selectedIndex === i''。否則,很好的答案:-) – Hooligancat