Переключить класс AngularJS с помощью ng-класса

Я пытаюсь переключить класс элемента с помощью 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;
}

В принципе, если $scope.autoScroll истинно, я хочу, чтобы ng-класс был icon-autoscroll, и если его false, я хочу, чтобы он был icon-autoscroll-disabled

То, что у меня сейчас не работает, и создает эту ошибку в консоли

Error: Lexer Error: Unexpected next character at columns 18-18 [?] in expression [{(isAutoScroll()) ? 'icon-autoscroll' : 'icon-autoscroll-disabled'}].

Как правильно это сделать?

ИЗМЕНИТЬ

решение 1: (устаревшее)

<button class="btn" ng-click="autoScroll = !autoScroll">
  <i ng-class="{'icon-autoscroll': autoScroll, 'icon-autoscroll-disabled': !autoScroll}"></i>
</button>

РЕДАКТИРОВАТЬ 2

решение 2:

Я хотел обновить решение, так как Solution 3, предоставленный Stewie, должен быть использован. Это самый стандартный, когда дело касается тройного оператора (и мне легче всего читать). Решение было бы

<button class="btn" ng-click="autoScroll = !autoScroll">
  <i ng-class="autoScroll ? 'icon-autoscroll' : 'icon-autoscroll-disabled'"></i>
</button>

переводит на:

if (autoScroll == true) ?//использовать класс 'icon-autoscroll' ://else использовать 'icon-autoscroll-disabled'

Ответ 1

Как использовать условный в ng-классе:

Решение 1:

<i ng-class="{'icon-autoscroll': autoScroll, 'icon-autoscroll-disabled': !autoScroll}"></i>

Решение 2:

<i ng-class="{true: 'icon-autoscroll', false: 'icon-autoscroll-disabled'}[autoScroll]"></i>

Решение 3 (angular v.1.1.4 + введено поддержка тройного оператора):

<i ng-class="autoScroll ? 'icon-autoscroll' : 'icon-autoscroll-disabled'"></i>

Plunker

Ответ 2

В качестве альтернативного решения, основанного на логическом операторе javascript '& &' который возвращает последнюю оценку, вы также можете сделать это следующим образом:

<i ng-class="autoScroll && 'icon-autoscroll' || !autoScroll && 'icon-autoscroll-disabled'"></i>

Это лишь немного более короткий синтаксис, но для меня его легче читать.

Ответ 3

Добавьте несколько классов на основе условия:

<div ng-click="AbrirPopUp(s)" 
ng-class="{'class1 class2 class3':!isNew, 
           'class1 class4': isNew}">{{ isNew }}</div>

Применить: class1 + class2 + class3, когда isNew = false,

Применить: class1 + class4, когда isNew = true

Ответ 4

data-ng-init="featureClass=false" data-ng-click="featureClass=!featureClass" data-ng-class="{'active': featureClass}"

Аналог toggleClass jQuery.

Ответ 5

Я сделал эту работу таким образом:

<button class="btn" ng-click='toggleClass($event)'>button one</button>
<button class="btn" ng-click='toggleClass($event)' >button two</button>

//в вашем контроллере

 $scope.toggleClass = function (event){
        $(event.target).toggleClass('active');
    }