ul
各要素に対してでレンダリングされる配列li
と、コントローラー上に と呼ばれるプロパティがあるとします。AngularJS でインデックスを使用しselectedIndex
て にクラスを追加する最適な方法は何でしょうか?li
selectedIndex
現在、コードを(手動で)複製しli
、タグの 1 つにクラスを追加しli
、および を使用してng-show
インデックスごとにng-hide
1 つだけ表示しています。li
ベストアンサー1
私のように CSS クラス名をコントローラーに入れたくない場合は、v1 以前から使用している古いトリックがあります。選択されたクラス名に直接評価される式を記述できます。カスタム ディレクティブは必要ありません。
ng:class="{true:'selected', false:''}[$index==selectedIndex]"
コロンを使用した古い構文に注意してください。
次のように、条件付きでクラスを適用する新しいより良い方法もあります。
ng-class="{selected: $index==selectedIndex}"
Angular は、オブジェクトを返す式をサポートするようになりました。このオブジェクトの各プロパティ (名前) はクラス名として扱われ、その値に応じて適用されるようになりました。
ただし、これらの方法は機能的に同等ではありません。次に例を示します。
ng-class="{admin:'enabled', moderator:'disabled', '':'hidden'}[user.role]"
したがって、基本的にモデル プロパティをクラス名にマッピングすることで既存の CSS クラスを再利用し、同時に CSS クラスをコントローラー コードから除外することができます。