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'
fuente

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 directivaautoScrollefecto 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.Respuestas:
Cómo usar condicional en ng-class:
Solución 1:
Solución 2:
Solución 3 (angular v.1.1.4 + soporte introducido para operador ternario):
Saqueador
fuente
Como solución alternativa, basada en el operador lógico javascript '&&' que devuelve la última evaluación, también puede hacerlo así:
Es solo una sintaxis un poco más corta, pero para mí es más fácil de leer.
fuente
Agregue más de una clase según la condición:
Aplicar: class1 + class2 + class3 cuando isNew = false ,
Aplicar: class1 + class4 cuando isNew = true
fuente
De manera análoga al
toggleClassmétodo de jQuery , esta es una forma de activaractive/ desactivar la clase cuando se hace clic en el elemento.fuente
el desplazamiento automático se definirá y modificará en el controlador.
<span ng-class= "autoscroll?'class_if_true':'class_if_false'"></span>Agregue varias clases según la condición por:
<span ng-class= "autoscroll?'first second third':'classes_if_false'"></span>fuente
Hice este trabajo de esta manera:
// en tu controlador
fuente