Estoy tratando de alternar la clase de un elemento usando 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;
}
Básicamente, si $scope.autoScrolles cierto, quiero que sea ng-class icon-autoscrolly si es falso, quiero que seaicon-autoscroll-disabled
Lo que tengo ahora no funciona y produce este error en la consola
Error: Lexer Error: Unexpected next character at columns 18-18 [?] in expression [{(isAutoScroll()) ? 'icon-autoscroll' : 'icon-autoscroll-disabled'}].
¿Cómo hago esto correctamente?
EDITAR
solución 1: (anticuado)
<button class="btn" ng-click="autoScroll = !autoScroll">
<i ng-class="{'icon-autoscroll': autoScroll, 'icon-autoscroll-disabled': !autoScroll}"></i>
</button>
EDITAR 2
solución 2:
Quería actualizar la solución ya que Solution 3, proporcionada por Stewie, debería ser la utilizada. Es el más estándar cuando se trata de operador ternario (y para mí, el más fácil de leer). La solución sería
<button class="btn" ng-click="autoScroll = !autoScroll">
<i ng-class="autoScroll ? 'icon-autoscroll' : 'icon-autoscroll-disabled'"></i>
</button>
se traduce en:
if (autoScroll == true) ?// use class 'icon-autoscroll' :// else use'icon-autoscroll-disabled'
autoScrollefecto aquí solo tendrá efecto en cada botón. (Probé esto con varios botones, y también funciona bien) Quiero decir, cuando hago clic en cada botón, afecta solo ese botón, en lugar de todos los botones.
angular expressionspor documentos => No hay declaraciones de flujo de control: no puede hacer nada de lo siguiente en expresión angular: condicionales, bucles o tirar. Use otra función o directiva