Sto cercando di attivare / disattivare la classe di un elemento 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;
}
Fondamentalmente, se $scope.autoScroll
è vero, voglio che ng-class sia icon-autoscroll
e se è falso, voglio che siaicon-autoscroll-disabled
Quello che ho ora non funziona e sta producendo questo errore nella console
Error: Lexer Error: Unexpected next character at columns 18-18 [?] in expression [{(isAutoScroll()) ? 'icon-autoscroll' : 'icon-autoscroll-disabled'}].
Come posso farlo correttamente?
MODIFICARE
soluzione 1: (obsoleto)
<button class="btn" ng-click="autoScroll = !autoScroll">
<i ng-class="{'icon-autoscroll': autoScroll, 'icon-autoscroll-disabled': !autoScroll}"></i>
</button>
MODIFICA 2
soluzione 2:
Volevo aggiornare la soluzione come Solution 3
, fornita da Stewie, dovrebbe essere quella utilizzata. È il più standard quando si tratta di operatore ternario (e per me più facile da leggere). La soluzione sarebbe
<button class="btn" ng-click="autoScroll = !autoScroll">
<i ng-class="autoScroll ? 'icon-autoscroll' : 'icon-autoscroll-disabled'"></i>
</button>
si traduce in:
if (autoScroll == true) ?
// use class 'icon-autoscroll' :
// else use'icon-autoscroll-disabled'
autoScroll
qui avrà effetto in ogni pulsante? (L'ho provato con più pulsanti e funziona anche bene) Voglio dire, quando faccio clic su ciascun pulsante, ha effetto solo su quel pulsante, anziché su tutti i pulsanti.
angular expressions
per docs => Nessuna dichiarazione del flusso di controllo: non è possibile eseguire alcuna delle seguenti operazioni in espressione angolare: condizionali, loop o lancio. Utilizzare un'altra funzione o direttiva