527

条件付きのような表現をする方法はありng-classますか?

たとえば、次のことを試しました。

<span ng-class="{test: 'obj.value1 == \'someothervalue\''}">test</span>

このコードの問題obj.value1は、クラス テストが常に要素に適用されることです。これを行う:

<span ng-class="{test: obj.value2}">test</span>

obj.value2真の値に等しくない限り、クラスは適用されません。これで、最初の例の問題を回避できます。

<span ng-class="{test: checkValue1()}">test</span>

関数checkValue1は次のようになります。

$scope.checkValue1 = function() {
  return $scope.obj.value === 'somevalue';
}

ng-classこれがどのように機能するはずなのか、私はただ疑問に思っています。これと同様のことをしたいカスタムディレクティブも作成しています。ただし、式を監視する方法が見つかりません (おそらくそれは不可能であり、このように機能する理由です)。

これが私が何を意味するかを示すplnkrです。

4

11 に答える 11

116

Angular JSは、この機能をng-class Directiveで提供します。条件を入れて、条件付きクラスを割り当てることもできます。これは、2 つの異なる方法で実現できます。

タイプ1

<div ng-class="{0:'one', 1:'two',2:'three'}[status]"></div>

このコードでは、ステータス値の値に応じてクラスが適用されます

ステータス値が0の場合、クラス1を適用します

ステータス値が1の場合、クラス2を適用します

ステータス値が2の場合、クラス3を適用します


タイプ2

<div ng-class="{1:'test_yes', 0:'test_no'}[status]"></div>

ステータスの値によってどのクラスに適用されますか

ステータス値が1 または true の場合、クラスtest_yesが追加されます

ステータス値が0 または false の場合、クラスtest_noが追加されます

于 2015-07-08T09:11:03.060 に答える
38

ng-class を動的に適用できる 2 つの方法を紹介します。

ステップ1

三項演算子を使用して

<div ng-class="condition?'class1':'class2'"></div>

出力

条件が true の場合、class1 が要素に適用されます。そうでない場合、class2 が適用されます。

不利益

実行時に条件値を変更しようとすると、クラスは何らかの形で変更されません。したがって、動的なクラス変更などの要件がある場合は、step2 に進むことをお勧めします。

ステップ2

<div ng-class="{value1:'class1', value2:'class2'}[condition]"></div>

出力

条件が value1 と一致する場合、class1 が要素に適用され、value2 と一致する場合、class2 が適用されます。また、動的なクラス変更はそれでうまく機能します。

これがあなたを助けることを願っています。

于 2016-04-22T10:36:53.843 に答える
36

Angular 構文では、:演算子を使用してif修飾子と同等の処理を実行します。

<div ng-class="{ 'clearfix' : (row % 2) == 0 }">

偶数行に clearfix クラスを追加します。それにもかかわらず、式は通常の if 条件で使用できるものであれば何でもかまいません。式は true または false のいずれかに評価される必要があります。

于 2014-03-26T19:00:07.060 に答える
9

Angular 2 の場合は、これを使用します

<div [ngClass]="{'active': dashboardComponent.selected_menu == 'mapview'}">Content</div>
于 2018-03-26T12:32:47.377 に答える
6

ng-classコア AngularJs のディレクティブです。「文字列構文」、「配列構文」、「評価式」、「三項演算子」、および以下で説明するその他の多くのオプションを使用できます。

文字列構文を使用したngClass

これは ngClass を使用する最も簡単な方法です。Angular 変数を ng-class に追加するだけで、それがその要素に使用されるクラスになります。

<!-- whatever is typed into this input will be used as the class for the div below -->
<input type="text" ng-model="textType">

<!-- the class will be whatever is typed into the input box above -->
<div ng-class="textType">Look! I'm Words!

文字列構文を使用した ngClassのデモ例

配列構文を使用した ngClass

これは、複数のクラスを適用できることを除いて、文字列構文メソッドに似ています。

<!-- both input boxes below will be classes for the div -->
<input type="text" ng-model="styleOne">
<input type="text" ng-model="styleTwo">

<!-- this div will take on both classes from above -->
<div ng-class="[styleOne, styleTwo]">Look! I'm Words!

評価された式を使用するngClass

ngClass を使用するより高度な方法 (およびおそらく最もよく使用する方法) は、式を評価することです。これが機能する方法は、変数または式が に評価されるtrue場合、特定のクラスを適用できるということです。そうでない場合、クラスは適用されません。

<!-- input box to toggle a variable to true or false -->
<input type="checkbox" ng-model="awesome"> Are You Awesome?
<input type="checkbox" ng-model="giant"> Are You a Giant?

<!-- add the class 'text-success' if the variable 'awesome' is true -->
<div ng-class="{ 'text-success': awesome, 'text-large': giant }">

評価された式を使用した ngClassの例

値を使用するngClass

これは、複数の値を唯一の変数と比較できることを除いて、評価された式の方法に似ています。

<div ng-class="{value1:'class1', value2:'class2'}[condition]"></div>

三項演算子を使用したngClass

三項演算子を使用すると、短縮形を使用して 2 つの異なるクラスを指定できます。1 つは式が true の場合で、もう 1 つは false の場合です。三項演算子の基本的な構文は次のとおりです。

ng-class="$variableToEvaluate ? 'class-if-true' : 'class-if-false'">

最初、最後、または特定の番号の評価

ディレクティブを使用していて、リスト内の、、または特定の番号にngRepeatクラスを適用する場合は、 の特別なプロパティを使用できます。これらには、、、、およびその他のいくつかが含まれます。これらの使用方法の例を次に示します。firstlastngRepeat$first$last$even$odd

<!-- add a class to the first item -->
<ul>
  <li ng-class="{ 'text-success': $first }" ng-repeat="item in items">{{ item.name }}</li>
</ul>

<!-- add a class to the last item -->
<ul>
  <li ng-class="{ 'text-danger': $last }" ng-repeat="item in items">{{ item.name }}</li>
</ul>

<!-- add a class to the even items and a different class to the odd items -->
<ul>
  <li ng-class="{ 'text-info': $even, 'text-danger': $odd }" ng-repeat="item in items">{{ item.name }}</li>
</ul>
于 2019-06-21T07:21:26.930 に答える