2017-05-31 10 views
2

こんにちは私はリストを並べ替えていないし、それらのすべてがアクティブなクラスを持っています。どのリスト項目にでもクリックすると、アクティブなクラスを切り替える必要があります。私のコードは次のようなものですアクティブクラスonclickをngFor角度2に与える

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

誰でも私にこれをやってもらえますか?

答えて

3

あなたが何かを行うことができます:呉クラスのコンポーネント

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

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

は、最初のプロパティを追加したいと第二の条件であるクラスです。

+0

ありがとう@エドゥアルド..これは私が欲しいものですが、すべてのリストアイテムは既にアクティブなクラスを持っているはずです。どうすればいいですか? –

+0

あなたは配列へのマップを行うことができます。 array.map(obj => { obj.active = false; return obj; }) –

+1

ありがとうございました。私はobj.active = trueでこれを行いました...これは私が望むものです)完璧に動作します) –

0

私はあなたがここにあなたの答えを見つけることができると信じて:AngularJs - Best-Practices on adding an active class on click (ng-repeat)

あなたがターゲットと角の$indexを通じてアイテム/オブジェクトにCSSを適用することができます。ポストは私ができるよりも論理を説明し、実証します。

+0

申し訳ありませんが、あなたの答えは私が欲しいものではありません。 –

2

インデックスプロパティを作成するだけです。 let i = indexを使用して(クリック)イベントを使用してインデックスを設定します。ただ設定のselectedIndex:真

<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 === i場合、typescriptですファイルを次にチェック。

export class ClassName { 
    sIndex: number = null; 

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

あなたはHTMLブロックでエラーが発生しました。 '[class.active] = 'selectedIndex === i'ではなく' [class.active] =' sIndex === i'です。そうでなければ、良い答えです:-) – Hooligancat