AngularJS使用ng-class切换类

Ron*_*nie 217 javascript angularjs

我试图使用转换元素的类 ng-class

<button class="btn">
  <i ng-class="{(isAutoScroll()) ? 'icon-autoscroll' : 'icon-autoscroll-disabled'}"></i>
</button>
Run Code Online (Sandbox Code Playgroud)

isAutoScroll():

$scope.isAutoScroll = function()
{
    $scope.autoScroll = ($scope.autoScroll) ? false : true;
    return $scope.autoScroll;
}
Run Code Online (Sandbox Code Playgroud)

基本上,如果$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>
Run Code Online (Sandbox Code Playgroud)

编辑2

解决方案2:

我想更新解决方案Solution 3,因为Stewie提供的应该是使用的解决方案.对于三元运算符来说,这是最标准的(对我来说最容易阅读).解决方案是

<button class="btn" ng-click="autoScroll = !autoScroll">
  <i ng-class="autoScroll ? 'icon-autoscroll' : 'icon-autoscroll-disabled'"></i>
</button>
Run Code Online (Sandbox Code Playgroud)

翻译为:

if (autoScroll == true) ?//使用class 'icon-autoscroll' :// else use'icon-autoscroll-disabled'

Ste*_*wie 434

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

解决方案1:

<i ng-class="{'icon-autoscroll': autoScroll, 'icon-autoscroll-disabled': !autoScroll}"></i>
Run Code Online (Sandbox Code Playgroud)

解决方案2:

<i ng-class="{true: 'icon-autoscroll', false: 'icon-autoscroll-disabled'}[autoScroll]"></i>
Run Code Online (Sandbox Code Playgroud)

解决方案3(角度v.1.1.4 +引入了对三元运算符的支持):

<i ng-class="autoScroll ? 'icon-autoscroll' : 'icon-autoscroll-disabled'"></i>
Run Code Online (Sandbox Code Playgroud)

Plunker

  • @Stewie Faaakin华丽的伴侣,爱它看起来像真正的代码而不是一些卑鄙的表达标记:D (10认同)
  • 第二个例子更干净,但是你不能把你正在评估的变量放在表达式的前面是荒谬的......它只是看起来很有趣.想象一下将表达式看作if语句:"if(variable)true:执行此操作,false:执行此操作... ugh #fullynerdy (3认同)
  • @mattdlockyer在更新的答案中查看解决方案3. (2认同)

Luk*_*kus 13

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

<i ng-class="autoScroll && 'icon-autoscroll' || !autoScroll && 'icon-autoscroll-disabled'"></i>
Run Code Online (Sandbox Code Playgroud)

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


Rol*_*oCC 10

根据条件添加多个类:

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

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

isNew = true时,应用:class1 + class4


Pav*_*vin 6

<div data-ng-init="featureClass=false" 
     data-ng-click="featureClass=!featureClass" 
     data-ng-class="{'active': featureClass}">
    Click me to toggle my class!
</div>
Run Code Online (Sandbox Code Playgroud)

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

  • 你能用英语提供更多关于你答案的信息吗?它与已经存在的答案有何不同? (2认同)
  • 我不确定为什么这个答案有很多否定票?这个解决方案实际上对我来说比上面的其他更好... (2认同)
  • 我认为描述写得很糟糕,人们对"jQuery"这个词做出反应.描述的意思是"这与JQuery中的toggleClass函数类似".顺便说一下,你需要初始化变量吗? (2认同)