vous ne pouvez pas passer plusieurs classes comme ng-class = "{'class1 class2': expression1}" il suffit de tester cela et cela n'a pas fonctionné du tout, solution comme @CodeHater a dit "Pour appliquer plusieurs classes lorsqu'une expression est vraie:" l'astuce
d1jhoni1b
9
Dans 1.2.16, l'option multi-classe ( 'class1 class2': expression) semble fonctionner correctement, sauf que si vous réutilisez une classe, elle est supprimée lorsque l'expression bascule entre les options. Par exemple, avec 'commonClass class1': expression == true, 'commonClass class2': expression == falsecommonClass est perdu lorsque l'expression bascule entre vrai et faux.
BrianS
10
@BrianS Je ferais quelque chose comme ça:class="commonClass" ng-class={'class1' : expression, 'class2' : !expression}
AlwaysALearner
@CodeHater merci. C'est à peu près ce que je prévois maintenant, il suffit de prendre un moment pour réparer le CSS.
Celui-ci ne fonctionne pas pour moi. <span ng-class = "params.isAdmin? 'fa fa-lock fa-2x': 'fa fa-unlock fa-2x'"> </span>. La console générera une erreur.
TommyQu
en utilisant cette méthode, puis-je ajouter une autre expression?
Randonnée Nalbandyan
6
@HikeNalbandyan oui, vous pouvez aussi ajouter une autre expression:ng-class="[expression1? 'class1 class2' : 'class3 class4', expression2 ? 'class5' : 'class6']"
mahi-man
47
Oui, vous pouvez avoir plusieurs expressions pour ajouter plusieurs classes dans ng-class.
Par exemple:
<divng-class="{class1:Result.length==2,class2:Result.length==3}"> Dummy Data </div>
Réponse brillante! J'ai toujours utilisé des fonctions pour des ng-classdirectives plus complexes , comme lorsque j'avais besoin d'appliquer un ternaire et une expression standard sur le même élément. J'ai soumis une modification à la réponse acceptée pour inclure l'utilisation de tableaux d'expressions.
Daniel Bonnell
Je ne suis pas un expert angulaire, mais il semble que cette construction: [{true:'index'+$index}[true], {0:'even', 1:'odd'}[ $index % 2 ]]peut être simplifiée comme ça ['index'+$index, {0:'even', 1:'odd'}[ $index % 2 ]]. Je viens de l'essayer dans Angular 1.5.9 et cela fonctionne :) Merci pour une excellente réponse!
vadipp
30
En utilisant une $scopeméthode sur le contrôleur, vous pouvez calculer les classes à afficher dans la vue. C'est particulièrement pratique si vous avez une logique complexe pour calculer les noms de classe et cela réduira la quantité de logique dans votre vue en la déplaçant vers le contrôleur:
Si la classe change après le rendu, la classe ng écoute-t-elle toujours les changements dans className?
remarsh
3
À mon humble avis, la portée ne devrait exposer la condition . Il devrait appartenir aux ng-liaisons HTML de déterminer quelle classe utiliser lorsque cette condition est remplie.
Alnitak
1
Cela remplace l'attribut class dans les éléments dom. Si l'on utilise cela, ils doivent inclure les classes qui n'ont pas besoin de conditions dans le retour className.
phuwin
21
Votre exemple fonctionne pour les classes conditionnées (le nom de la classe indiquera si le expressionDataXest vrai):
Savez-vous s'il est possible de combiner les deux types de modèle, c'est-à-dire d'avoir une classe conditionnelle utilisant {}et une classe liée aux données utilisant []?
jwg
3
Pour autant que je sache, ce n'est pas possible. De plus, il n'est pas possible de mettre deux ngClassdirectives sur un élément.
<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>
En l'utilisant
<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>
Réponses:
Pour appliquer différentes classes lorsque différentes expressions évaluent
true
:Pour appliquer plusieurs classes lorsqu'une expression est vraie:
ou tout simplement:
Remarquez les guillemets simples entourant les classes CSS.
la source
'class1 class2': expression
) semble fonctionner correctement, sauf que si vous réutilisez une classe, elle est supprimée lorsque l'expression bascule entre les options. Par exemple, avec'commonClass class1': expression == true, 'commonClass class2': expression == false
commonClass est perdu lorsque l'expression bascule entre vrai et faux.class="commonClass" ng-class={'class1' : expression, 'class2' : !expression}
ng-class="{'class1' : expression1, 'class2':expression1 }"
possible? Pourriez-vous regarder ma question: stackoverflow.com/questions/25391692/…Pour la notation de l'opérateur ternaire:
la source
ng-class="[expression1? 'class1 class2' : 'class3 class4', expression2 ? 'class5' : 'class6']"
Oui, vous pouvez avoir plusieurs expressions pour ajouter plusieurs classes dans ng-class.
Par exemple:
la source
Une alternative incroyablement puissante aux autres réponses ici:
Quelques exemples:
1. Ajoute simplement «class1 class2 class3» à la div:
2. Ajoute des classes "impaires" ou "paires" à div, en fonction de l'index $:
3. Crée dynamiquement une classe pour chaque div basée sur $ index
Si
$index=5
cela se traduit par:Voici un exemple de code que vous pouvez exécuter:
la source
ng-class
directives plus complexes , comme lorsque j'avais besoin d'appliquer un ternaire et une expression standard sur le même élément. J'ai soumis une modification à la réponse acceptée pour inclure l'utilisation de tableaux d'expressions.[{true:'index'+$index}[true], {0:'even', 1:'odd'}[ $index % 2 ]]
peut être simplifiée comme ça['index'+$index, {0:'even', 1:'odd'}[ $index % 2 ]]
. Je viens de l'essayer dans Angular 1.5.9 et cela fonctionne :) Merci pour une excellente réponse!En utilisant une
$scope
méthode sur le contrôleur, vous pouvez calculer les classes à afficher dans la vue. C'est particulièrement pratique si vous avez une logique complexe pour calculer les noms de classe et cela réduira la quantité de logique dans votre vue en la déplaçant vers le contrôleur:et dans la vue, simplement:
la source
className
?ng-
liaisons HTML de déterminer quelle classe utiliser lorsque cette condition est remplie.className
.Votre exemple fonctionne pour les classes conditionnées (le nom de la classe indiquera si le
expressionDataX
est vrai):<div ng-class="{class1: expressionData1, class2: expressionData2}"></div>
Vous pouvez également ajouter plusieurs classes, fournies par l'utilisateur de l'élément:
<div ng-class="[class1, class2]"></div>
Usage:
<div class="foo bar" class1="foo" class2="bar"></div>
la source
{}
et une classe liée aux données utilisant[]
?ngClass
directives sur un élément.<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>
et plus encore: scotch.io/tutorials/javascript/the-many-ways-to-use-ngclassVoici un exemple comparant plusieurs états de routeur angulaire-ui en utilisant le OR || opérateur:
Il donnera au li les classes d'avertissement et / ou actives, selon que les conditions sont remplies.
la source
Sous active et activemenu se trouvent les classes et itemCount et ShowCart est l'expression / les valeurs booléennes.
la source
Avec plusieurs conditions
la source
Trouvé autrement grâce à Scotch.io
C'était ma référence.CHEMIN
la source
Autre moyen, nous pouvons créer une fonction pour contrôler "en utilisant plusieurs classes"
CSS
Scénario
En l'utilisant
Vous pouvez vous référer à la page de code complète à ng-class si exemple
la source