ループしている<li>
要素にcssクラスを動的に追加したい。ループは次のとおりです。
<li ng-repeat="todo in todos" ng-class="{{todo.priority}}">
<a href="#/todos/{{todo.id}}">{{todo.title}}</a>
<p>{{todo.description}}</p>
</li>
私のtodoモデルでは、「緊急」、「それほど重要ではない」、または「通常」のプロパティ優先度があり、各要素にクラスを割り当てたいだけです。
ng-class="{'urgent': todo.urgent}"
のようなブール値に対してこれを行うことができますが、変数はブール値ではなく、3つの値を持っています。どうすればいいですか?クラスはいくつかの視覚的なものを変更するため、ng-style="..."
を使用したくないことにも注意してください。
関数を式として単純に割り当て、そこから適切なクラスを返すことができます。 編集:動的クラスのより良い解決策もあります。以下の注意を参照してください。
ビューからの抜粋:
<div ng-class="appliedClass(myObj)">...</div>
そしてコントローラーで:
$scope.appliedClass = function(myObj) {
if (myObj.someValue === "highPriority") {
return "special-css-class";
} else {
return "default-class"; // Or even "", which won't add any additional classes to the element
}
}
私は最近、別のアプローチについて学びました。操作するクラスに対応するプロパティを持つオブジェクトを渡します。値は式またはブール変数です。簡単な例:
ng-class="{ active: user.id == activeId }"
この場合、user.id
が$scope
オブジェクトのactive
と一致する限り、activeId
クラスが要素に追加されます!
クラスを追加するだけの場合は、補間でclass
属性を使用します。
class="priority-is-{{todo.priority}}"
あなたはほとんどそれを得た:)
補間マークアップなし({{
および}}
):
<li ng-repeat="todo in todos" ng-class="todo.priority">
...