J'essaie de basculer la classe d'un élément en utilisant ng-class
<button class="btn">
<i ng-class="{(isAutoScroll()) ? 'icon-autoscroll' : 'icon-autoscroll-disabled'}"></i>
</button>
isAutoScroll ():
$scope.isAutoScroll = function()
{
$scope.autoScroll = ($scope.autoScroll) ? false : true;
return $scope.autoScroll;
}
Fondamentalement, si $scope.autoScroll
c'est vrai, je veux que ng-class soit icon-autoscroll
et si c'est faux, je veux que ce soiticon-autoscroll-disabled
Ce que j'ai maintenant ne fonctionne pas et génère cette erreur dans la console
Error: Lexer Error: Unexpected next character at columns 18-18 [?] in expression [{(isAutoScroll()) ? 'icon-autoscroll' : 'icon-autoscroll-disabled'}].
Comment dois-je procéder correctement?
ÉDITER
solution 1: (obsolète)
<button class="btn" ng-click="autoScroll = !autoScroll">
<i ng-class="{'icon-autoscroll': autoScroll, 'icon-autoscroll-disabled': !autoScroll}"></i>
</button>
EDIT 2
solution 2:
Je voulais mettre à jour la solution car Solution 3
, fournie par Stewie, devrait être celle utilisée. C'est le plus standard en ce qui concerne l'opérateur ternaire (et pour moi le plus facile à lire). La solution serait
<button class="btn" ng-click="autoScroll = !autoScroll">
<i ng-class="autoScroll ? 'icon-autoscroll' : 'icon-autoscroll-disabled'"></i>
</button>
Se traduit par:
if (autoScroll == true) ?
// utilise la classe 'icon-autoscroll' :
// sinon utilise'icon-autoscroll-disabled'
la source
angular expressions
per docs => Aucune instruction de flux de contrôle: vous ne pouvez pas effectuer l'une des opérations suivantes dans l'expression angulaire: conditions, boucles ou lancer. Utilisez une autre fonction ou directiveautoScroll
ici n'aura d'effet que sur chaque bouton? (J'ai testé cela avec plusieurs boutons, et cela fonctionne bien aussi) Je veux dire, quand je clique sur chaque bouton, cela affecte uniquement ce bouton, au lieu de tous les boutons.Réponses:
Comment utiliser le conditionnel dans la classe ng:
Solution 1:
Solution 2:
Solution 3 (angulaire v.1.1.4 + prise en charge introduite pour l'opérateur ternaire):
Plunker
la source
Comme solution alternative, basée sur l'opérateur logique javascript '&&' qui retourne la dernière évaluation, vous pouvez également le faire comme ceci:
C'est une syntaxe légèrement plus courte, mais pour moi plus facile à lire.
la source
Ajoutez plusieurs classes en fonction de la condition:
Appliquer: classe1 + classe2 + classe3 lorsque isNew = false ,
Appliquer: classe1 + classe4 lorsque isNew = true
la source
Analogue à la
toggleClass
méthode de jQuery , c'est un moyen d'activeractive
/ désactiver la classe lorsque l'utilisateur clique sur l'élément.la source
le défilement automatique sera défini et modifié dans le contrôleur.
<span ng-class= "autoscroll?'class_if_true':'class_if_false'"></span>
Ajoutez plusieurs classes en fonction de la condition en:
<span ng-class= "autoscroll?'first second third':'classes_if_false'"></span>
la source
J'ai fait ce travail de cette façon:
// dans votre contrôleur
la source