条件式を使用したAngularJS ngスタイル


267

私はこのように私の問題を処理しています:

ng-style="{ width: getTheValue() }"

しかし、コントローラー側でこの機能を使用しないようにするために、私は次のようなことをしたいと思います:

ng-style="{ width: myObject.value == 'ok' ? '100%' : '0%' }"

これどうやってするの?


17
どのバージョンのangularを使用していますか?少なくとも1.1.5では、これは変更なしで可能です。デモ
Yoshi

私は1.0.8を使用しています:)ああ、私は本当にアップグレードを試みるべきです...
TigrouMeow 2013年

4
これは1.1.5でも機能しますが、幅の代わりに他のスタイルプロパティ(たとえばfont-size)を使用すると、コードを次のように変更するまで機能しません。ng-style = "{ 'font-size': myObject.value == 'ok'? '20px': '10px'} "(スタイルプロパティを引用符で囲む必要があります)。
BornToCode

私はこれが役に立つことを知りませんが、新規参入者はオブジェクトでngスタイルを使用できますが、このようにng-style = "objectBit?{'border': '1px solid red'}:{'border': 'none'}"
Usman I

回答:


124

@Yoshiが言ったように、angular 1.1.5以降は変更なしで使用できます。

angular <1.1.5を使用する場合、ng-classを使用できます。

.largeWidth {
    width: 100%;
}

.smallWidth {
    width: 0%;
}

// [...]

ng-class="{largeWidth: myVar == 'ok', smallWidth: myVar != 'ok'}"

3
よし、ありがとう!クラスを使用せずにそれを行う方法はあるのかと思いましたが、すべてテンプレートで直接Angularを使用しています。
TigrouMeow 2013年

1
これを複数のクラス名に使用するにはどうすればよいですか?
Thanigainathan

3
そして、私が角度> 1.1.5を使用している場合?
ビッグポニー2016年

14
これは質問に正確に答えるものではありません。
リー

1
この質問は文字通りngスタイルの例を求めており、100票以上の投票で受け入れられた回答はそれを提供していません。
JWiley

361

簡単な例:

<div ng-style="isTrue && {'background-color':'green'} || {'background-color': 'blue'}" style="width:200px;height:100px;border:1px solid gray;"></div>

{'background-color': 'green'} RETURN true

または同じ結果:

<div ng-style="isTrue && {'background-color':'green'}" style="width:200px;height:100px;border:1px solid gray;background-color: blue"></div>

その他の条件付きの可能性:

<div ng-style="count === 0 && {'background-color':'green'}  || count === 1 && {'background-color':'yellow'}" style="width:200px;height:100px;border:1px solid gray;background-color: blue"></div>

これをどのように達成できますか?ただし、複数の独立したスタイル/条件を使用して?ありがとうございます。
Adam Plocher 2017

@Arthurあなたの例はチェックするつもりですisTrue {'background-color':'green'} またはそれはチェックするだけでisTruebackground それがどのように機能するかを置くでしょう誰か説明してください?
Rajnish Rajput

1
@ rajnish-rajput isTrueをチェックして背景を配置します。デフォルトでは、{'background-color': 'green'}はスタイルオブジェクトとしてtrueを返します
Arthur Tsidkilov

100

あなたはそれをそのように達成することができます:

ng-style="{ 'width' : (myObject.value == 'ok') ? '100%' : '0%' }"

43

@jfredsilvaは明らかに質問に対する最も単純な答えを持っいます:

ng-style = "{'width':(myObject.value == 'ok')? '100%': '0%'}"

しかし、あなたは本当にもっと複雑なものに対する私の答えを検討したいかもしれません。

三項のような例:

<p ng-style="{width: {true:'100%',false:'0%'}[myObject.value == 'ok']}"></p>

より複雑なもの:

<p ng-style="{
   color:       {blueish: 'blue', greenish: 'green'}[ color ], 
  'font-size':  {0: '12px', 1: '18px', 2: '26px'}[ zoom ]
}">Test</p>

もし $scope.color == 'blueish'、色は「青」になります。

の場合$scope.zoom == 2、フォントサイズは26pxになります。

angular.module('app',[]);
function MyCtrl($scope) {
  $scope.color = 'blueish';
  $scope.zoom = 2;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js"></script>
<div ng-app="app" ng-controller="MyCtrl" ng-style="{
   color:       {blueish: 'blue', greenish: 'green'}[ color ], 
  'font-size':  {0: '12px', 1: '18px', 2: '26px'}[ zoom ]
}">
  color = {{color}}<br>
  zoom = {{zoom}}
</div>


興味深い構文{<value>:'<string>'}[<$scope.var>]}、それはどこから来たのですか?
netalex 2017

10

式で使用したい場合、厳密な方法は次のとおりです。

<span class="ng-style: yourCondition && {color:'red'};">Sample Text</span>

しかし、最良の方法はng-classを使用することです


Syntax Error: Token '%3A' is%20an%20unexpected%20token at column 9 of the expression [ng-style%3A%...
Z.クラ2018

9

一般的なノートで、あなたはの組み合わせを使用することができますng-ifし、ng-style背景画像の変化に条件変更を組み込みます。

<span ng-if="selectedItem==item.id"
              ng-style="{'background-image':'url(../images/'+'{{item.id}}'+'_active.png)','background-size':'52px 57px','padding-top':'70px','background-repeat':'no-repeat','background-position': 'center'}"></span>
        <span ng-if="selectedItem!=item.id"
              ng-style="{'background-image':'url(../images/'+'{{item.id}}'+'_deactivated.png)','background-size':'52px 57px','padding-top':'70px','background-repeat':'no-repeat','background-position': 'center'}"></span>

これUncaught Error: Template parse errors: Can't bind to 'ng-style' since it isn't a known property of 'div'は私にエラーを引き起こしました
Serj Sagan

6

単一のcssプロパティ

ng-style="1==1 && {'color':'red'}"

複数のcssプロパティについては、以下を参照できます

ng-style="1==1 && {'color':'red','font-style': 'italic'}"

1 == 1を条件式に置き換えます


4

また、三項演算子のこの構文は機能します:

  ng-style="<$scope.var><condition> ? {
        '<css-prop-1>':((<value>) / (<value2>)*100)+'%',
        '<css-prop-2>':'<string>'
      } : {
        '<css-prop-1>':'<string>',
        '<css-prop-2>':'<string>'
      }"

<value>$ scopeプロパティの値はどこにありますか。例では:

ng-style="column.histograms.value=>0 ? 
  {
    'width':((column.histograms.value) / (column.histograms.limit)*100)+'%',
    'background':'#F03040'
  } : {
    'width':'1px',
    'background':'#2E92FA'
  }"

「」

これにより、cssプロパティ値への計算が可能になります。


3

私は複数の独立した条件で以下のようにしていて、それは魅力のように機能します:

<div ng-style="{{valueFromJS}} === 'Hello' ? {'color': 'red'} : {'color': ''} && valueFromNG-Repeat === '{{dayOfToday}}' ? {'font-weight': 'bold'} : {'font-weight': 'normal'}"></div>

2

私はスタイルを追加するためにng-classを使用しています:-

 ng-class="column.label=='Description'  ? 'tableStyle':                     
           column.label == 'Markdown Type' ? 'Mtype' : 
           column.label == 'Coupon Number' ? 'couponNur' :  ''
           "

スタイルを与えるためにangular.jsでng-classディレクティブと共に三項演算子を使用します。次に、.cssまたは.scssファイルでクラスのスタイルを定義します。例:-

.Mtype{
       width: 90px !important;
       min-width: 90px !important;
       max-width: 90px !important;
      }
.tableStyle{
         width: 129px !important;
         min-width: 129px !important;
         max-width: 129px !important;
}
.couponNur{
         width: 250px !important;
         min-width: 250px !important;
         max-width: 250px !important;
}

-1

どのように機能するかはわかりませんが、Angular 9ではngStyleを次のように角かっこで囲む必要があります。

[ng-style]="{ 'width' : (myObject.value == 'ok') ? '100%' : '0%' }"

それ以外の場合は機能しません

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.