2012-12-24 7 views
11

私は非常に単純なAngular Appを持っていて、ng-repeatと一緒にng-repeatを使ってテンプレートを繰り返し、プロパティの1つによって外側のdivに異なるクラスを適用しようとしていますバインドされているデータの私はシンプルな...ng-class内の式

ng-class="message.type" 

を使用する場合

これは働いていた...残念ながら私は、メッセージタイプの先頭に文字列を連結する必要があります。

は私が...ここJSfiddleを作成するために

http://jsfiddle.net/XuYGN/5/

を試してみました...しかし、それはあまりにもJSfiddleを作るのが私の最初の試みだと角のものにはないので、私は何か間違ったことしなければなりません走っているようだ。私は表現で何をしようとしているかを示しています。

本当にありがとうございます。

+0

これは正常です[http://jsfiddle.net/XuYGN/7/]が動作しますが、単純な 'class'ではなく' ng-class'を使用する必要がありますか? – raina77ow

+1

'onLoad'を' wrap(body)なし 'に変更すると、JSFiddleはあなたが期待しているようにAngularJSコードを実行します。 – Bert

+0

ありがとうBert – jonhobbs

答えて

24

HTML:

<div ng-controller="mainCtrl"> 

     <div ng-repeat="message in data.messages" ng-class="'className-' + message.type"> 

      Repeat Me   

     </div>   

    </div>     

</div> 

ではJavaScript:

var mainCtrl=function($scope) { 

    $scope.data = {} 

    $scope.data.messages = [ 
     { 
      "type": "phone"}, 
     { 
      "type": "email"}, 
     { 
      "type": "meeting"}, 
     { 
      "type": "note"} 
    ] 

}

それが表現であるので、あなたは{{}}式の周りにいくつかを置くそれを行ういけないフィドルで。

10

FYI、答え@camusものに代わるものは:

class="{{'className-' + message.type}}" 

classを用いて、式(内部{{}}複数の)スペースで区切られたクラス名の文字列に評価されなければなりません。

ng-classを使用する場合、式は次のいずれかに評価される必要があります:

  1. スペースで区切られたクラス名の文字列、または
  2. とクラス名の配列、または
  3. マップ/クラス名のオブジェクトをブール値に変換します。
+4

これ以外にも 'class =" className - {{message.type}} "' –

+0

があります.MichaelStramel IE以外のすべてでこれが動作する理由は何ですか? 「IEだよ! ... – whyoz

+0

@MichaelStramelは角をなしていますが、(あなたの例のように)クラス宣言の中で角変数を使用するときは、ページが読み込まれるときのパフォーマンス上の理由から、代わりにng-classを使用してください。 class = "className - {{...}}"を使用すると、ページは "className - {{...}}"を文字列として解釈し、{{..}}は解決されず、画面上に表示されます。 ng-classを使用すると、{{..}}が解決されていない間は何も表示されません。このように、ng-classを使うと、画面に表示される醜いコードを取得することはできません。より速いインターネット接続では、これは目立つものではありませんが、より遅いインターネットにあります。 –