有没有办法让ng-class这样的表达式成为条件表达式?

例如,我尝试过以下方法:

<span ng-class="{test: 'obj.value1 == \'someothervalue\''}">test</span>

这段代码的问题是,不管obj是什么。Value1是,类test总是应用于元素。这样做:

<span ng-class="{test: obj.value2}">test</span>

只要obj。Value2不等于真值,该类未应用。现在我可以通过这样做来解决第一个例子中的问题:

<span ng-class="{test: checkValue1()}">test</span>

其中checkValue1函数是这样的:

$scope.checkValue1 = function() {
  return $scope.obj.value === 'somevalue';
}

我只是想知道这是不是ng级的工作方式。我还建立了一个自定义指令,我想做类似的事情。然而,我找不到一种方法来观看一个表情(也许这是不可能的,这就是为什么它这样工作的原因)。

这里有一个plnkr说明我的意思。


当前回答

你的第一次尝试几乎是正确的,它应该工作没有引号。

{test: obj.value1 == 'someothervalue'}

这是一个硬币。

ngClass指令将适用于任何计算true或false的表达式,有点类似于Javascript表达式,但有一些不同,你可以在这里阅读。 如果条件太复杂,那么可以使用返回真值或假值的函数,就像在第三次尝试中所做的那样。

补充一下:您还可以使用逻辑运算符来形成像这样的逻辑表达式

ng-class="{'test': obj.value1 == 'someothervalue' || obj.value2 == 'somethingelse'}"

其他回答

我看到上面的例子,但他们都开始花括号(json地图)。另一种选择是返回基于计算的结果。结果也可以是一个css类名的列表(不仅仅是map)。例子:

ng-class="(status=='active') ? 'enabled' : 'disabled'"

or

ng-class="(status=='active') ? ['enabled'] : ['disabled', 'alik']"

说明:如果状态为active,则将使用enabled类。否则,将使用禁用的类。

列表[]用于使用多个类(而不是一个)。

在ng-repeat中使用ng-class

<table>
    <tbody>
            <tr ng-repeat="task in todos"
                ng-class="{'warning': task.status == 'Hold' , 'success': task.status == 'Completed',
              'active': task.status == 'Started', 'danger': task.status == 'Pending' } ">
                <td>{{$index + 1}}</td>
                <td>{{task.name}}</td>
                <td>{{task.date|date:'yyyy-MM-dd'}}</td>
                <td>{{task.status}}</td>
            </tr>
    </tbody>
</table>

对于任务中的每个状态。Status为该行使用不同的类。

对于Angular 2,使用这个

<div [ngClass]="{'active': dashboardComponent.selected_menu == 'mapview'}">Content</div>

Angular的语法是使用:操作符来执行与if修饰符等价的操作

<div ng-class="{ 'clearfix' : (row % 2) == 0 }">

将clearfix类添加到偶数行。尽管如此,表达式可以是我们在正常的if条件下可以拥有的任何东西,它应该被求值为真或假。

你的第一次尝试几乎是正确的,它应该工作没有引号。

{test: obj.value1 == 'someothervalue'}

这是一个硬币。

ngClass指令将适用于任何计算true或false的表达式,有点类似于Javascript表达式,但有一些不同,你可以在这里阅读。 如果条件太复杂,那么可以使用返回真值或假值的函数,就像在第三次尝试中所做的那样。

补充一下:您还可以使用逻辑运算符来形成像这样的逻辑表达式

ng-class="{'test': obj.value1 == 'someothervalue' || obj.value2 == 'somethingelse'}"