2012-12-24 24 views
11

Mam bardzo prostą aplikację kątową i próbuję użyć ng-repeat w połączeniu z ng-class, aby powtórzyć szablon i zastosować inną klasę do zewnętrznego div, w zależności od jednej z właściwości powiązanych danych.wyrażenie wewnątrz klasy ng

to działało kiedy stosuje się proste ...

ng-class="message.type" 

... ale niestety muszę złączyć ciąg do początku typu wiadomości.

Próbowałem stworzyć JSfiddle tutaj ...

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

... ale to moja pierwsza próba dokonywania JSfiddle zbyt i muszę robić coś złego, ponieważ kątowe rzeczy nie robi wydaje się być uruchomiony. Pokazuje jednak, co próbuję zrobić z wyrażeniem.

Każda pomoc będzie naprawdę doceniona.

+0

Działa poprawnie [tutaj] (http://jsfiddle.net/XuYGN/7/), ale czy na pewno chcesz użyć 'ng-class', a nie prostej' class'? – raina77ow

+1

Jeśli zmienisz 'onLoad' na' no wrap (body) 'JSFiddle uruchomi kod AngularJS tak jak się spodziewasz. – Bert

+0

Bardzo dziękuję Bertowi – jonhobbs

Odpowiedz

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

}

na skrzypcach umieścić kilka {{}} wokół wyrażenie nie robić, bo to jest wyrazem .

10

FYI, alternatywą dla co @camus odpowiedział:

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

Podczas korzystania class, wyrażenie (wewnątrz {{}}) musi ocenić na ciąg nazw spacjami klasowych.

Podczas korzystania ng-class wyrażenie musi ocenić jednego z następujących powodów:

  1. ciąg nazwy spacjami klasowych lub
  2. i tablicę nazw klas, lub
  3. mapa/obiekt nazw klas do wartości logicznych.
+4

inną alternatywą do tego byłoby 'class =" className - {{message.type}} "' –

+0

@MichaelStramel jakikolwiek pomysł, jaki może być powód, aby to działało we wszystkim z wyjątkiem IE? "To jest IE!" odpowiedzi typu nie są akceptowane ... – whyoz

+0

@MichaelStramel w kanciastym, gdy używasz zmiennych kątowych w deklaracji klasy (jak w twoim przykładzie), powinieneś tego unikać i zamiast tego używać klasy ng ze względu na wydajność podczas ładowania strony. Jeśli użyjesz class = "className - {{...}}", strona zinterpretuje "className - {{...}}" jako ciąg znaków, gdy {{..}} nie zostanie rozwiązany i wyświetli go na ekranie . Jeśli używasz klasy ng, nie wyświetli nic, dopóki {{..}} nie zostanie rozwiązane. W ten sposób z klasą ng nie dostaniesz brzydkiego kodu wyświetlanego na ekranie. W szybszych połączeniach internetowych nie jest to zauważalne, ale jest w wolniejszym internecie. –

Powiązane problemy