2012-12-24 6 views
11

Ich habe eine sehr einfache Angular App und ich versuche, ng-repeat in Verbindung mit ng-Klasse zu verwenden, um eine Vorlage zu wiederholen und eine andere Klasse auf das äußere div je nach einer der Eigenschaften anzuwenden der Daten, die gebunden werden.Ausdruck innerhalb ng-Klasse

dies funktioniert, wenn ich ein einfaches verwendet ...

ng-class="message.type" 

... aber leider muss ich einen String an den Anfang des Nachrichtentyps verketten.

Ich versuchte, ein JSfiddle hier ...

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

... aber es ist mein erster Versuch zu schaffen, auch eine JSfiddle zu machen, und ich muss etwas falsch tun, weil die Winkel Sachen nicht der Fall ist scheinen zu rennen. Es zeigt jedoch, was ich mit dem Ausdruck zu tun versuche.

Jede Hilfe würde wirklich geschätzt werden.

+0

Es funktioniert ok [hier] (http://jsfiddle.net/XuYGN/7/), aber sind Sie sicher, dass Sie 'ng-Klasse' verwenden müssen, und nicht die einfache' Klasse'? – raina77ow

+1

Wenn Sie "onLoad" in "no wrap (body)" ändern, führt JSFiddle den AngularJS-Code wie erwartet aus. – Bert

+0

Vielen Dank Bert – jonhobbs

Antwort

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"} 
    ] 

}

in der Geige einige setzen {{}} um den Ausdruck nicht, es tun, weil es ein Ausdruck .

10

FYI, eine Alternative zu dem, was beantwortet @camus:

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

Wenn class verwenden, der Ausdruck (innen {{}} s) muss auf eine Reihe von Leerzeichen getrennte Klassennamen auszuwerten.

Wenn ng-class verwenden, der Ausdruck auf eine der folgenden auswerten müssen:

  1. eine Folge von Leerzeichen getrennte Klassennamen oder
  2. und Anordnung von Klassennamen oder
  3. eine Karte/Objekt von Klassennamen zu booleschen Werten.
+4

eine andere Alternative zu diesem wäre 'class =" Klassenname - {{message.type}} "' –

+0

@MichaelStramel irgendeine Idee, was der Grund dafür sein könnte, damit in allem außer IE zu arbeiten? "Es ist IE!" type Antworten werden nicht akzeptiert ... – whyoz

+0

@MichaelStramel in angular, wenn Sie Winkelvariablen innerhalb der Klassendeklaration verwenden (wie in Ihrem Beispiel), sollten Sie das vermeiden und stattdessen ng-Klasse verwenden, aus Leistungsgründen, wenn die Seite geladen wird. Wenn Sie class = "className - {{...}}" verwenden, interpretiert die Seite "className - {{...}}" als Zeichenfolge, während die {{..}} nicht aufgelöst wird und auf dem Bildschirm angezeigt wird . Wenn Sie ng-class verwenden, wird nichts angezeigt, solange {{..}} nicht aufgelöst wird. Auf diese Weise erhalten Sie mit ng-class nicht den hässlichen Code, der auf dem Bildschirm angezeigt wird. Bei schnelleren Internetverbindungen ist dies nicht bemerkbar, aber in langsameren Internets. –

Verwandte Themen