Angular JSでCSSスタイル属性を動的に適用する


112

これは簡単な問題ですが、解決策を見つけることができません。

次のマークアップがあります。

<div style="width:20px; height:20px; margin-top:10px; border:solid 1px black; background-color:#ff0000;"></div>

スコープにバインドする背景色が必要なので、これを試しました:

<div style="{width:20px; height:20px; margin-top:10px; border:solid 1px black; background-color:{{data.backgroundCol}};}"></div>

それはうまくいかなかったので、私はいくつかの調査を行ってを見つけましたがng-style、それはうまくいかなかったので、動的な部分を取り出してng-style、次のようにスタイルをハードコーディングしただけです...

<div ng-style="{width:20px; height:20px; margin-top:10px; border:solid 1px black; background-color:#ff0000;}"></div>

そしてそれはうまくいきません。仕組みを誤解してng-styleいますか?パッティングの方法があり{{data.backgroundCol}}、プレーンスタイル属性に、それが値を挿入するために取得するには?


この記事をチェックアウト:ecofic.com/about/blog/...
のRohit

回答:


190

ngStyle ディレクティブを使用すると、HTML要素に CSSスタイルを動的に設定できます。

CSSスタイルの名前と値をキーとするオブジェクトに対して評価されるは、それらのCSSキーに対応する値です。一部のCSSスタイル名はオブジェクトの有効なキーではないため、引用符で囲む必要があります。

ng-style="{color: myColor}"

あなたのコードは次のようになります:

<div ng-style="{'width':'20px', 'height':'20px', 'margin-top':'10px', 'border':'solid 1px black', 'background-color':'#ff0000'}"></div>

スコープ変数を使用する場合:

<div ng-style="{'background-color': data.backgroundCol}"></div>

以下は、を使用するフィドルの例ngStyleで、実行中のスニペットを含むコードの下にあります。

angular.module('myApp', [])
.controller('MyCtrl', function($scope) {
  $scope.items = [{
      name: 'Misko',
      title: 'Angular creator'
    }, {
      name: 'Igor',
      title: 'Meetup master'
    }, {
      name: 'Vojta',
      title: 'All-around superhero'
    }

  ];
});
.pending-delete {
  background-color: pink
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller='MyCtrl' ng-style="{color: myColor}">

  <input type="text" ng-model="myColor" placeholder="enter a color name">

  <div ng-repeat="item in items" ng-class="{'pending-delete': item.checked}">
    name: {{item.name}}, {{item.title}}
    <input type="checkbox" ng-model="item.checked" />
    <span ng-show="item.checked"/><span>(will be deleted)</span>
  </div>
  <p>
    <div ng-hide="myColor== 'red'">I will hide if the color is set to 'red'.</div>
</div>


ホバーしたときに、現在のクリックされた要素の元の背景色ではなく、背景色を取得したいのですが。以下を使用すると、元の色ではなくホバーの背景色が表示されます。$ event.currentTarget.currentStyle.backgroundColor; 元の背景色を取得する方法はありますか?
Mahesh

<div ng-style = "{'background-color':data.backgroundCol}"> </ div>は<div ng-style = "{background-color:data.backgroundCol}"> </ div>である必要があります
eric2323223

24

最も簡単な方法は、スタイルの関数を呼び出し、関数に正しいスタイルを返すようにすることです。

<div style="{{functionThatReturnsStyle()}}"></div>

そしてあなたのコントローラーで:

$scope.functionThatReturnsStyle = function() {
  var style1 = "width: 300px";
  var style2 = "width: 200px";
  if(condition1)
     return style1;
  if(condition2)
     return style2;
}

4
私はそれをお勧めしません、角度はすべてビューのスタイルの詳細を維持することです
OlivierM

7
私はこれが唯一のクロムのようないくつかのブラウザでは動作しますが、これもお勧めしませんが、あなたはIEを見れば9+これは動作しません
imal hasarangaペレラ

実際、これはまだIE11では機能しません。以前のプロジェクトからいくつかのコードをコピーしましたが、機能しなかったため混乱しました。以前のプロジェクトではChromeを使用していました
csharpsql

18

ngStyle ドキュメントから直接:

CSSスタイルの名前と値をキーとするオブジェクトに対して評価される式は、それらのCSSキーに対応する値です。

<div ng-style="{'width': '20px', 'height': '20px', ...}"></div>

だからあなたはこれを行うことができます:

<div ng-style="{'background-color': data.backgroundCol}"></div>

お役に立てれば!


4
ええ、私はドキュメントでそれを見ましたが、それを複数のルールに変換する方法を見ることができませんでした。今では、それが通常のcss構文ではなくオブジェクト構文であることがわかります。
jonhobbs 2014年

14

一般的な注意として、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>

0

変更されないスタイルは通常のstyle属性に、条件付き/スコープスタイルはng-style属性に入れる必要があります。また、文字列キーは必要ありません。ハイフンで区切られたCSSキーの場合は、キャメルケースを使用します。

<div ng-style="{backgroundColor: data.backgroundCol}" style="width:20px; height:20px; margin-top:10px; border:solid 1px black;"></div>

0

単にこれを行う:

<div ng-style="{'background-color': '{{myColorVariable}}', height: '2rem'}"></div>

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