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'
autoScroll
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.
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 directive