Existe-t-il un moyen de faire une expression pour quelque chose comme ng-class
être un conditionnel?
Par exemple, j'ai essayé ce qui suit:
<span ng-class="{test: 'obj.value1 == \'someothervalue\''}">test</span>
Le problème avec ce code est que, quoi qu'il en obj.value1
soit, le test de classe est toujours appliqué à l'élément. Ce faisant:
<span ng-class="{test: obj.value2}">test</span>
Tant que obj.value2
ne correspond pas à une valeur véridique, la classe n'est pas appliquée. Maintenant, je peux contourner le problème dans le premier exemple en procédant comme suit:
<span ng-class="{test: checkValue1()}">test</span>
Où la checkValue1
fonction ressemble à ceci:
$scope.checkValue1 = function() {
return $scope.obj.value === 'somevalue';
}
Je me demande simplement si c'est ainsi que cela ng-class
est censé fonctionner. Je construis également une directive personnalisée dans laquelle j'aimerais faire quelque chose de similaire à cela. Cependant, je ne peux pas trouver un moyen de regarder une expression (et c'est peut-être impossible et la raison pour laquelle cela fonctionne comme ça).
Voici un plnkr pour montrer ce que je veux dire.
ng-class="'label-success': obj.value1 == 'Ready', 'label-warning': obj.value1 == 'On hold'}"
Réponses:
Votre première tentative était presque juste, cela devrait fonctionner sans les guillemets.
Voici un plnkr .
La directive ngClass fonctionnera avec n'importe quelle expression qui évalue véridique ou falsey, un peu similaire aux expressions Javascript mais avec quelques différences, vous pouvez lire ici . Si votre conditionnel est trop complexe, vous pouvez utiliser une fonction qui retourne true ou falsey, comme vous l'avez fait lors de votre troisième tentative.
Juste pour compléter: vous pouvez également utiliser des opérateurs logiques pour former des expressions logiques comme
la source
'
sinon si vous souhaitez ajouter plus de classes ou si votre classe a des tirets ou des traits de soulignement, cela ne fonctionnera pas.ng-class="{'test test-2: obj.value1 === 'value'}"
ng-class="{'test test-2': obj.value1 === 'value'}"
[class.test]="obj.value1 == 'someotervalue'"
.ng-class="{danger:!enabled || (type === 'WHEEL' && !isOnline) }
Utilisation de ng-class dans ng-repeat
Pour chaque état dans task.status, une classe différente est utilisée pour la ligne.
la source
Angular JS fournit cette fonctionnalité dans la directive ng-class . Dans lequel vous pouvez mettre une condition et également affecter une classe conditionnelle. Vous pouvez y parvenir de deux manières différentes.
Type 1
Dans cette classe , le code sera applicable en fonction de la valeur de l' état valeur
si la valeur d' état est 0, appliquer la classe 1
si la valeur d' état est 1, appliquer la classe deux
si la valeur d' état est 2, appliquer la classe trois
Type 2
Dans quelle classe sera appliqué par valeur de statut
si la valeur d' état est 1 ou vraie, alors il ajoutera la classe test_yes
si la valeur de l' état est 0 ou fausse, cela ajoutera la classe test_no
la source
<div ng-class="{'Image' || 'image': 'image-icon', 'Video' || 'video' || 'aVideo' || 'bVideo' : 'video-icon'}[resource.type]"></div>
Je vois de grands exemples ci-dessus mais ils commencent tous par des accolades (carte json). Une autre option consiste à renvoyer un résultat basé sur le calcul. Le résultat peut également être une liste de noms de classes css (pas seulement une carte). Exemple:
ou
Explication: Si le statut est actif, la classe
enabled
sera utilisée. Sinon, la classedisabled
sera utilisée.La liste
[]
est utilisée pour utiliser plusieurs classes (pas une seule).la source
Il existe une méthode simple que vous pouvez utiliser avec l'attribut de classe html et le raccourci if / else. Pas besoin de le rendre si complexe. Utilisez simplement la méthode suivante.
Joyeux codage, Nimantha Perera
la source
Je vais vous montrer deux méthodes par lesquelles vous pouvez appliquer dynamiquement la classe ng
Étape 1
En utilisant l'opérateur ternaire
Production
Si votre condition est vraie, alors class1 sera appliqué à votre élément, sinon class2 sera appliqué.
Désavantage
Lorsque vous essayez de modifier la valeur conditionnelle au moment de l'exécution, la classe ne change pas. Je vous propose donc de passer à l'étape 2 si vous avez des exigences telles que le changement de classe dynamique.
Étape 2
Production
si votre condition correspond à valeur1, alors classe1 sera appliquée à votre élément, si correspond à valeur2, alors classe2 sera appliquée et ainsi de suite. Et le changement de classe dynamique fonctionnera bien avec cela.
J'espère que cela vous aidera.
la source
La syntaxe angulaire consiste à utiliser l' opérateur : pour effectuer l'équivalent d'un modificateur if
Ajoutez la classe clearfix aux lignes paires. Néanmoins, l'expression pourrait être tout ce que nous pouvons avoir dans un état normal et elle devrait être vraie ou fausse.
la source
L'utilisation de la fonction avec ng-class est une bonne option lorsque quelqu'un doit exécuter une logique complexe pour décider de la classe CSS appropriée.
http://jsfiddle.net/ms403Ly8/2/
HTML:
CSS:
JavaScript :
la source
utilisez ceci
par exemple, si la condition est [2 == 2], les états sont {true: '...', false: '...'}
la source
Pour Angular 2, utilisez ceci
la source
[ngClass]="['base-class', thread.isActive ? 'base-class--active' : '']"
ng-class
est une directive des AngularJ de base. Dans lequel vous pouvez utiliser "String Syntax", "Array Syntax", "Evaluated Expression", "Ternary Operator" et bien d'autres options décrites ci-dessous:ngClass à l'aide de la syntaxe de chaîne
C'est la manière la plus simple d'utiliser ngClass. Vous pouvez simplement ajouter une variable angulaire à ng-class et c'est la classe qui sera utilisée pour cet élément.
Exemple de démonstration de ngClass à l'aide de la syntaxe de chaîne
ngClass à l'aide de la syntaxe de tableau
Ceci est similaire à la méthode de syntaxe de chaîne, sauf que vous pouvez appliquer plusieurs classes.
ngClass utilisant l'expression évaluée
Une méthode plus avancée d'utilisation de ngClass (et celle que vous utiliserez probablement le plus) consiste à évaluer une expression. La façon dont cela fonctionne est que si une variable ou une expression est évaluée
true
, vous pouvez appliquer une certaine classe. Sinon, la classe ne sera pas appliquée.Exemple de ngClass utilisant l'expression évaluée
ngClass utilisant la valeur
Ceci est similaire à la méthode d'expression évaluée, sauf que vous pouvez simplement comparer plusieurs valeurs avec la seule variable.
ngClass à l'aide de l'opérateur ternaire
L'opérateur ternaire nous permet d'utiliser des raccourcis pour spécifier deux classes différentes, une si une expression est vraie et une pour faux. Voici la syntaxe de base de l'opérateur ternaire:
Évaluation du premier, du dernier ou du numéro spécifique
Si vous utilisez la
ngRepeat
directive et que vous souhaitez appliquer des classes aufirst
,last
ou un numéro spécifique dans la liste, vous pouvez utiliser les propriétés particulières dengRepeat
. Ceux - ci comprennent$first
,$last
,$even
,$odd
, et quelques autres. Voici un exemple d'utilisation.la source