no puede pasar varias clases como ng-class = "{'class1 class2': expression1}" simplemente pruebe eso y no funcionó en absoluto, la solución como @CodeHater dijo "Para aplicar varias clases cuando una expresión es verdadera:" eso hizo el truco
d1jhoni1b
99
En 1.2.16, la opción multiclase ( 'class1 class2': expression) parece funcionar bien, excepto que si reutiliza una clase, se descarta cuando la expresión alterna entre las opciones. Por ejemplo, con 'commonClass class1': expression == true, 'commonClass class2': expression == falsecommonClass se pierde cuando la expresión alterna entre verdadero y falso.
Brillante respuesta! Siempre he usado funciones para ng-classdirectivas más complejas , como cuando necesitaba aplicar una expresión ternaria y estándar en el mismo elemento. He enviado una edición a la respuesta aceptada para incluir el uso de matrices de expresiones.
Daniel Bonnell
No soy un experto angular, pero parece que esta construcción: [{true:'index'+$index}[true], {0:'even', 1:'odd'}[ $index % 2 ]]puede simplificarse así ['index'+$index, {0:'even', 1:'odd'}[ $index % 2 ]]. Lo acabo de probar en Angular 1.5.9 y funciona :) ¡Gracias por una excelente respuesta!
vadipp
30
Usando un $scopemétodo en el controlador, puede calcular qué clases generar en la vista. Esto es especialmente útil si tiene una lógica compleja para calcular los nombres de clase y reducirá la cantidad de lógica en su vista moviéndola al controlador:
Si la clase cambia después del renderizado, ¿ng-class sigue escuchando los cambios className?
remarsh
3
En mi humilde opinión, el alcance solo debe exponer la condición . Debería depender de los ng-enlaces HTML para determinar qué clase usar cuando se cumpla esa condición.
Alnitak
1
Esto sobrescribe el atributo de clase en elementos dom. Si se usa esto, tienen que incluir las clases que no necesitan condiciones en la devolución className.
phuwin el
21
Su ejemplo funciona para clases condicionadas (el nombre de la clase mostrará si expressionDataXes verdadero):
<script>
angular.module('myapp',[]).controller('ExampleController',['$scope',function($scope){
$scope.MyColors=['It is Red','It is Yellow','It is Blue','It is Green','It is Gray'];
$scope.getClass =function(strValue){if(strValue ==("It is Red"))return"Red";elseif(strValue ==("It is Yellow"))return"Yellow";elseif(strValue ==("It is Blue"))return"Blue";elseif(strValue ==("It is Green"))return"Green";elseif(strValue ==("It is Gray"))return"Gray";}}]);</script>
Usándolo
<bodyng-app="myapp"ng-controller="ExampleController"><h2>AngularJS ng-class if example</h2><ul><ling-repeat="icolor in MyColors"><png-class="[getClass(icolor), 'b']">{{icolor}}</p></li></ul>
Respuestas:
Para aplicar diferentes clases cuando diferentes expresiones evalúan
true
:Para aplicar varias clases cuando una expresión es verdadera:
o simplemente:
Observe las comillas simples que rodean las clases css.
fuente
'class1 class2': expression
) parece funcionar bien, excepto que si reutiliza una clase, se descarta cuando la expresión alterna entre las opciones. Por ejemplo, con'commonClass class1': expression == true, 'commonClass class2': expression == false
commonClass se pierde cuando la expresión alterna entre verdadero y falso.class="commonClass" ng-class={'class1' : expression, 'class2' : !expression}
ng-class="{'class1' : expression1, 'class2':expression1 }"
posible? ¿Le importaría mirar mi pregunta: stackoverflow.com/questions/25391692/…Para la notación de operador ternario:
fuente
ng-class="[expression1? 'class1 class2' : 'class3 class4', expression2 ? 'class5' : 'class6']"
Sí, puede tener múltiples expresiones para agregar múltiples clases en ng-class.
Por ejemplo:
fuente
Una alternativa increíblemente poderosa a otras respuestas aquí:
Algunos ejemplos:
1. Simplemente agrega 'class1 class2 class3' al div:
2. Agrega clases 'impares' o 'pares' a div, dependiendo del índice $:
3. Crea dinámicamente una clase para cada div basada en $ index
Si
$index=5
esto resultará en:Aquí hay un ejemplo de código que puede ejecutar:
fuente
ng-class
directivas más complejas , como cuando necesitaba aplicar una expresión ternaria y estándar en el mismo elemento. He enviado una edición a la respuesta aceptada para incluir el uso de matrices de expresiones.[{true:'index'+$index}[true], {0:'even', 1:'odd'}[ $index % 2 ]]
puede simplificarse así['index'+$index, {0:'even', 1:'odd'}[ $index % 2 ]]
. Lo acabo de probar en Angular 1.5.9 y funciona :) ¡Gracias por una excelente respuesta!Usando un
$scope
método en el controlador, puede calcular qué clases generar en la vista. Esto es especialmente útil si tiene una lógica compleja para calcular los nombres de clase y reducirá la cantidad de lógica en su vista moviéndola al controlador:y en la vista, simplemente:
fuente
className
?ng-
enlaces HTML para determinar qué clase usar cuando se cumpla esa condición.className
.Su ejemplo funciona para clases condicionadas (el nombre de la clase mostrará si
expressionDataX
es verdadero):<div ng-class="{class1: expressionData1, class2: expressionData2}"></div>
También puede agregar varias clases, proporcionadas por el usuario del elemento:
<div ng-class="[class1, class2]"></div>
Uso:
<div class="foo bar" class1="foo" class2="bar"></div>
fuente
{}
una clase condicional y una clase vinculada a datos[]
?ngClass
directivas en un elemento.<a href="#/u/[[msg.from]]" ng-bind="msg.from" class="name, ng-class:[users[msg.from].nice, users[msg.from].star];" ng-class="{premium: users[msg.from].premium}"></a>
y más: scotch.io/tutorials/javascript/the-many-ways-to-use-ngclassAquí hay un ejemplo que compara múltiples estados de enrutador angular-ui usando OR || operador:
Le dará al li las clases de advertencia y / o activo, dependiendo de si se cumplen las condiciones.
fuente
Debajo de active y activemenu hay clases y itemCount y ShowCart es expresión / valores booleanos.
fuente
Con múltiples condiciones
fuente
Encontró otra forma gracias a Scotch.io
Esta fue mi referencia. CAMINO
fuente
De otra manera, podemos crear una función para controlar "usar múltiples clases"
CSS
Guión
Usándolo
Puede consultar la página de códigos completa en ng-class si es un ejemplo
fuente