使用ng-class添加多个类

Adi*_*thi 517 angularjs ng-class

我们可以有多个表达式来添加多个ng-class吗?

例如.

<div ng-class="{class1: expressionData1, class2: expressionData2}"></div>
Run Code Online (Sandbox Code Playgroud)

如果是的话,任何人都可以提出这样做​​的例子.

.

Alw*_*ner 931

在不同表达式求值时应用不同的类true:

<div ng-class="{class1 : expression1, class2 : expression2}">
    Hello World!
</div>
Run Code Online (Sandbox Code Playgroud)

要在表达式成立时应用多个类:

<!-- notice expression1 used twice -->
<div ng-class="{class1 : expression1, class2 : expression1}">
    Hello World!
</div>
Run Code Online (Sandbox Code Playgroud)

或者很简单:

<div ng-class="{'class1 class2' : expression1}">
    Hello World!
</div>
Run Code Online (Sandbox Code Playgroud)

请注意围绕css类的单引号.

  • 你不能传递像ng-class ="{'class1 class2':expression1}这样的多个类"只是测试它并且根本不起作用,解决方案为@CodeHater说"当表达式成立时应用多个类:"诀窍 (10认同)
  • @BrianS我会这样做:`class ="commonClass"ng-class = {'class1':expression,'class2':!expression}` (10认同)
  • 在1.2.16中,多类选项(`'class1 class2':expression`)似乎工作得很好,除非你重用一个类,当表达式在选项之间切换时它会被删除.例如,使用`'commonClass class1':expression == true,'commonClass class2':expression == false` commonClass在表达式在true和false之间切换时丢失. (7认同)

小智 47

是的,您可以使用多个表达式在ng-class中添加多个类.

例如:

<div ng-class="{class1:Result.length==2,class2:Result.length==3}"> Dummy Data </div>
Run Code Online (Sandbox Code Playgroud)


Raz*_*aul 46

对于三元运算符表示法:

<div ng-class="expression1? 'class1 class2' : 'class3 class4'">
Run Code Online (Sandbox Code Playgroud)

  • @HikeNalbandyan是的你也可以添加另一个表达式:`ng-class ="[expression1?'class1 class2':'class3 class4',expression2?'class5':'class6']"` (5认同)

Kit*_*Kit 41

这里是其他答案的一个非常强大的替代方案:

ng-class="[  { key: resulting-class-expression }[ key-matching-expression ], ..  ]"
Run Code Online (Sandbox Code Playgroud)

一些例子:

1.只需在div中添加"class1 class2 class3":

<div ng-class="[{true: 'class1'}[true], {true: 'class2 class3'}[true]]"></div>
Run Code Online (Sandbox Code Playgroud)

2.向div添加'odd'或'even'类,具体取决于$ index:

<div ng-class="[{0:'even', 1:'odd'}[ $index % 2]]"></div>
Run Code Online (Sandbox Code Playgroud)

3.基于$ index为每个div动态创建一个类

<div ng-class="[{true:'index'+$index}[true]]"></div>
Run Code Online (Sandbox Code Playgroud)

如果$index=5这将导致:

<div class="index5"></div>
Run Code Online (Sandbox Code Playgroud)

这是您可以运行的代码示例:

var app = angular.module('app', []); 
app.controller('MyCtrl', function($scope){
  $scope.items = 'abcdefg'.split('');
}); 
Run Code Online (Sandbox Code Playgroud)
.odd  { background-color: #eee; }
.even { background-color: #fff; }
.index5 {background-color: #0095ff; color: white; font-weight: bold; }
* { font-family: "Courier New", Courier, monospace; }
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js"></script>

<div ng-app="app" ng-controller="MyCtrl">
  <div ng-repeat="item in items"
    ng-class="[{true:'index'+$index}[true], {0:'even', 1:'odd'}[ $index % 2 ]]">
    index {{$index}} = "{{item}}" ng-class="{{[{true:'index'+$index}[true], {0:'even', 1:'odd'}[ $index % 2 ]].join(' ')}}"
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 精彩回答!我总是使用函数来处理更复杂的`ng-class`指令,例如当我需要在同一元素上应用三元和标准表达式时.我已经提交了对已接受答案的编辑,包括使用表达式数组. (2认同)

小智 29

使用$scope控制器上的方法,您可以计算视图中要输出的类.如果您有一个用于计算类名的复杂逻辑,这将特别方便,它将通过将其移动到控制器来减少视图中的逻辑量:

app.controller('myController', function($scope) {

    $scope.className = function() {

        var className = 'initClass';

        if (condition1())
            className += ' class1';

        if (condition2())
            className += ' class2';

        return className;
    };
});
Run Code Online (Sandbox Code Playgroud)

在视图中,简单地说:

<div ng-class="className()"></div>
Run Code Online (Sandbox Code Playgroud)

  • 恕我直言,范围应该只暴露_condition_.应该由HTML`ng-`绑定来确定满足条件时要使用的_class_. (3认同)

sel*_*ary 20

您的示例适用于条件类(如果expressionDataX为真,则类名称将显示):

<div ng-class="{class1: expressionData1, class2: expressionData2}"></div>

您还可以添加由元素用户提供的多个类:

<div ng-class="[class1, class2]"></div>

用法:

<div class="foo bar" class1="foo" class2="bar"></div>

  • 你知道是否可以组合两种类型的模板,即使用`{}`的条件类和使用`[]`的数据绑定类? (3认同)
  • 据我所知,这是不可能的.此外,不可能在元素上放置两个`ngClass`指令. (3认同)
  • 你会感到惊讶:`<a href ="#/ u/[[msg.from]]"ng-bind ="msg.from"class ="name,ng-class:[users [msg.from].好的,用户[msg.from] .star];" ng-class ="{premium:users [msg.from] .premium}"> </a>`等等:http://scotch.io/tutorials/javascript/the-many-ways-to-use-ngclass (2认同)

nit*_*ech 11

以下是使用OR ||比较多个angular-ui-router状态的示例 运营商:

<li ng-class="
    {
        warning:
            $state.includes('out.pay.code.wrong')
            || $state.includes('out.pay.failed')
        ,
        active:
            $state.includes('out.pay')
    }
">
Run Code Online (Sandbox Code Playgroud)

根据条件是否得到满足,它会给li提供警告和/或激活等级.


Viv*_*day 6

active和activemenu下面是类,itemCount和ShowCart是表达式/布尔值.

ng-class="{'active' : itemCount, 'activemenu' : showCart}"
Run Code Online (Sandbox Code Playgroud)


小智 5

有多种条件

<div ng-class="{'class1' : con1 || can2, 'class2' : con3 && con4}">
Hello World!
</div>
Run Code Online (Sandbox Code Playgroud)


小智 5

感谢 Scotch.io 找到了另一种方式

<div ng-repeat="step in steps" class="step-container step" ng-class="[step.status, step.type]" ng-click="onClick(step.type)">
Run Code Online (Sandbox Code Playgroud)

这是我的参考。小路