Я пытаюсь переключить класс элемента с помощью 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
true, я хочу, чтобы ng-class был, 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
предоставлено Стьюи. Он является самым стандартным, когда дело доходит до троичного оператора (и мне легче всего читать). Решение будет
<button class="btn" ng-click="autoScroll = !autoScroll">
<i ng-class="autoScroll ? 'icon-autoscroll' : 'icon-autoscroll-disabled'"></i>
</button>
переводится как:
if (autoScroll == true) ?
// использовать класс 'icon-autoscroll' :
// еще использовать'icon-autoscroll-disabled'
источник
angular expressions
per docs => Нет выражений потока управления: вы не можете выполнять одно из следующих действий в угловом выражении: условные выражения, циклы или бросок. Используйте другую функцию или директивуautoScroll
здесь будет просто эффект в каждой кнопке? (Я протестировал это с несколькими кнопками, и это тоже хорошо работает) Я имею в виду, когда я нажимаю каждую кнопку, это влияет только на эту кнопку, а не на все кнопки.Ответы:
Как использовать условное в ng-классе:
Решение 1:
Решение 2:
Решение 3 (угловой v.1.1.4 + введена поддержка троичного оператора):
Plunker
источник
В качестве альтернативного решения, основанного на логическом операторе javascript '&&', который возвращает последнюю оценку, вы также можете сделать это следующим образом:
Это только немного короче синтаксис, но для меня легче читать.
источник
Добавьте более одного класса в зависимости от условия:
Применить: class1 + class2 + class3 когда isNew = false ,
Применить: class1 + class4 когда isNew = true
источник
По аналогии с
toggleClass
методом jQuery , это способ включенияactive
/ выключения класса при нажатии на элемент.источник
Автопрокрутка будет определена и изменена в контроллере.
<span ng-class= "autoscroll?'class_if_true':'class_if_false'"></span>
Добавить несколько классов в зависимости от условия:
<span ng-class= "autoscroll?'first second third':'classes_if_false'"></span>
источник
Я сделал эту работу следующим образом:
// в вашем контроллере
источник