使用ng-class在AngularJS中切换类
使用ng-class在AngularJS中切换类
我正在尝试使用ng-class
来切换元素的类。\n
\nisAutoScroll():\n
$scope.isAutoScroll = function() { $scope.autoScroll = ($scope.autoScroll) ? false : true; return $scope.autoScroll; }
\n基本上,如果$scope.autoScroll
为true,我希望ng-class为icon-autoscroll
,如果为false,我希望它为icon-autoscroll-disabled
。\n我现在的做法不起作用,并在控制台中产生以下错误:\nError: Lexer Error: Unexpected next character at columns 18-18 [?] in expression [{(isAutoScroll()) ? \'icon-autoscroll\' : \'icon-autoscroll-disabled\'}].
\n我应该如何正确地做到这一点?\n编辑\n解决方案1:(已过时)\n
\n编辑2\n解决方案2:\n我想将解决方案更新为Stewie提供的Solution 3
,因为它应该是最常用的三元运算符(对我来说最容易阅读的)。解决方案如下:\n
\n翻译为:\nif (autoScroll == true) ?
//使用类\'icon-autoscroll\' :
//否则使用\'icon-autoscroll-disabled\'
问题的出现原因:
这个问题的出现是因为在AngularJS中,我们希望根据条件来为元素添加不同的class,但是使用ng-class指令时,我们只能为元素添加一个class,无法根据不同的条件添加多个class。
解决方法:
为了解决这个问题,我们可以使用ng-class指令的对象语法,通过在ng-class中使用对象来动态地添加多个class。
具体的解决方法如下所示:
- 首先,在ng-class属性中定义一个对象。
- 对象的key是要添加的class,value是一个布尔值或者表达式,根据这个值来决定是否添加这个class。
- 当布尔值或者表达式为true时,对应的class将会被添加到元素上。
在这个例子中,我们可以看到ng-class属性中的对象有两个key-value对:
- 第一个key-value对是:{'class1 class2 class3':!isNew},当isNew为false时,将会添加class1、class2和class3这三个class。
- 第二个key-value对是:{'class1 class4': isNew},当isNew为true时,将会添加class1和class4这两个class。
这样,根据isNew的值的不同,元素上的class就会动态地改变。
整理得到的文章如下:
在AngularJS中使用ng-class指令实现toggle class的效果
在AngularJS中,我们经常需要根据条件来为元素添加不同的class。然而,使用ng-class指令时,我们只能为元素添加一个class,无法根据不同的条件添加多个class。那么,如何解决这个问题呢?
我们可以使用ng-class指令的对象语法来实现这个效果。具体的解决方法如下所示:
首先,在ng-class属性中定义一个对象。对象的key是要添加的class,value是一个布尔值或者表达式,根据这个值来决定是否添加这个class。当布尔值或者表达式为true时,对应的class将会被添加到元素上。
下面是一个具体的例子:
{{ isNew }}
在这个例子中,ng-class属性中的对象有两个key-value对。第一个key-value对是:{'class1 class2 class3':!isNew},当isNew为false时,将会添加class1、class2和class3这三个class。第二个key-value对是:{'class1 class4': isNew},当isNew为true时,将会添加class1和class4这两个class。
这样,根据isNew的值的不同,元素上的class就会动态地改变,实现了toggle class的效果。
通过使用ng-class指令的对象语法,我们可以根据不同的条件来动态地为元素添加多个class,从而实现更加灵活的样式控制。
AngularJS使用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(Angular v.1.1.4+引入了三元运算符的支持):
<i ng-class="autoScroll ? 'icon-autoscroll' : 'icon-autoscroll-disabled'"></i>
这三种解决方案都可以实现根据条件切换类。第二种解决方案看起来更简洁,但是不能将要评估的变量放在表达式的最前面,这样读起来有些奇怪。想象一下将表达式作为if语句来看待:“如果(变量)为真,则执行这个操作,否则执行那个操作... 哎呀 #完全书呆子
真是太棒了,看起来就像是真正的代码,而不是一些奇怪的表达式标记:D
事实上,先评估值是非常有用的,因为它可以避免意外地给变量赋予一个新值。
三元运算符正是我正在寻找的。提供了三个示例与版本支持细节,做得很好。