2012-12-24 15 views
11

Ho un'app angolare molto semplice e sto cercando di usare ng-repeat in congiunzione con ng-class per ripetere un modello e applicare una classe diversa al div esterno in base a una delle proprietà dei dati associati.espressione all'interno della classe ng

questo ha funzionato quando ho usato un semplice ...

ng-class="message.type" 

... ma purtroppo ho bisogno di concatenare una stringa per l'inizio del tipo di messaggio.

Ho cercato di creare un JSfiddle qui ...

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

... ma è il mio primo tentativo di fare troppo un JSfiddle e io devo fare qualcosa di sbagliato, perché la roba angolare non lo fa sembra che stia correndo. Tuttavia mostra ciò che sto cercando di fare con l'espressione.

Qualsiasi aiuto sarebbe davvero apprezzato.

+0

Funziona ok [qui] (http://jsfiddle.net/XuYGN/7/), ma sei sicuro di aver bisogno di usare 'ng-class', e non il semplice' class'? – raina77ow

+1

Se si cambia 'onLoad' in' no wrap (body) 'il JSFiddle eseguirà il codice AngularJS come ci si aspetta. – Bert

+0

Grazie mille Bert – jonhobbs

risposta

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 violino si mette un po '{{}} intorno l'espressione non lo fate perché è espressione .

10

FYI, in alternativa a quello che @camus risposto:

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

Quando si utilizza class, l'espressione (dentro {{}} s) deve restituire una serie di nomi di classi spazio delimitato.

Quando si utilizza ng-class, l'espressione deve restituire una delle seguenti operazioni:

  1. una stringa di nomi di classe spazio delimitato, o
  2. e array di nomi di classe, o
  3. una mappa/oggetto dei nomi di classe ai valori booleani.
+4

un'altra alternativa a questo sarebbe 'class =" className - {{message.type}} "' –

+0

@MichaelStramel qualsiasi idea di quale potrebbe essere la ragione per far funzionare tutto in tutto tranne IE? "È IE!" le risposte di tipo non sono accettate ... – whyoz

+0

@MichaelStramel in angolare, quando si usano le variabili angolari all'interno della dichiarazione di classe (come nel proprio esempio), si dovrebbe evitare questo, e usare invece ng-class, per motivi di prestazioni quando la pagina viene caricata. Se si utilizza class = "className - {{...}}" la pagina interpreterà "className - {{...}}" come una stringa mentre {{...}} non viene risolto e lo si visualizza sullo schermo . Se si utilizza ng-class, non verrà visualizzato nulla mentre {{...}} non è stato risolto. In questo modo, con ng-class non otterrai il brutto codice mostrato sullo schermo. Nelle connessioni Internet più veloci questo non è evidente, ma è in internet più lenti. –

Problemi correlati