Переключить класс 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');
}