Estou tentando alternar a classe de um 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;
}
Basicamente, se $scope.autoScrollfor verdade, quero que a classe ng seja icon-autoscrolle, se for falsa, quero que sejaicon-autoscroll-disabled
O que eu tenho agora não está funcionando e está produzindo esse erro no console
Error: Lexer Error: Unexpected next character at columns 18-18 [?] in expression [{(isAutoScroll()) ? 'icon-autoscroll' : 'icon-autoscroll-disabled'}].
Como faço isso corretamente?
EDITAR
solução 1: (desatualizada)
<button class="btn" ng-click="autoScroll = !autoScroll">
<i ng-class="{'icon-autoscroll': autoScroll, 'icon-autoscroll-disabled': !autoScroll}"></i>
</button>
EDIT 2
solução 2:
Eu queria atualizar a solução Solution 3, pois , fornecida por Stewie, deveria ser a utilizada. É o mais padrão quando se trata de operador ternário (e para mim mais fácil de ler). A solução seria
<button class="btn" ng-click="autoScroll = !autoScroll">
<i ng-class="autoScroll ? 'icon-autoscroll' : 'icon-autoscroll-disabled'"></i>
</button>
traduz para:
if (autoScroll == true) ?// classe de uso 'icon-autoscroll' :// else use'icon-autoscroll-disabled'
autoScrollaqui só terá efeito em cada botão? (Eu testei isso com vários botões, e funciona muito bem) Quero dizer, quando clico em cada botão, afeta apenas esse botão, em vez de todos os botões.
angular expressionspor docs => Nenhuma declaração de fluxo de controle: você não pode executar nenhum dos seguintes procedimentos na expressão angular: condicionais, loops ou lançamento. Utilizar outra função ou diretiva