条件付きでクラスを適用する最良の方法は何ですか? 質問する

条件付きでクラスを適用する最良の方法は何ですか? 質問する

ul各要素に対してでレンダリングされる配列liと、コントローラー上に と呼ばれるプロパティがあるとします。AngularJS でインデックスを使用しselectedIndexて にクラスを追加する最適な方法は何でしょうか?liselectedIndex

現在、コードを(手動で)複製しli、タグの 1 つにクラスを追加しli、および を使用してng-showインデックスごとにng-hide1 つだけ表示しています。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 クラスをコントローラー コードから除外することができます。

おすすめ記事