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.autoScroll
es cierto, quiero que sea ng-class icon-autoscroll
y 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 expressions
por 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 directivaautoScroll
efecto 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
toggleClass
mé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