AngularJS使用ng-class切换类

时间:2013-03-13 21:54:39

标签: javascript angularjs

我正在尝试使用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-class为icon-autoscroll,如果错误,我希望它为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:

我想更新解决方案,因为Stewie提供的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'

6 个答案:

答案 0 :(得分:428)

如何在ng-class中使用条件:

解决方案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(角度v.1.1.4 +引入了对三元运算符的支持):

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

Plunker

答案 1 :(得分:13)

作为替代解决方案,基于javascript逻辑运算符'&amp;&amp;'返回最后一次评估,你也可以这样做:

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

它只是略短的语法,但对我来说更容易阅读。

答案 2 :(得分:10)

根据条件添加多个类:

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

isNew = false 时,应用:class1 + class2 + class3,

isNew = true

时,应用:class1 + class4

答案 3 :(得分:6)

<div data-ng-init="featureClass=false" 
     data-ng-click="featureClass=!featureClass" 
     data-ng-class="{'active': featureClass}">
    Click me to toggle my class!
</div>

类似于jQuery的toggleClass方法,这是一种在单击元素时打开/关闭active类的方法。

答案 4 :(得分:1)

自动滚动将在控制器中定义和修改。

scheme_id

根据条件通过以下方式添加多个类:

<span ng-class= "autoscroll?'class_if_true':'class_if_false'"></span>

答案 5 :(得分:-1)

我以这种方式完成了这项工作:

<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');
    }