52

我想动态地将一个 css 类添加到<li>我正在循环的元素中。循环是这样的:

<li ng-repeat="todo in todos" ng-class="{{todo.priority}}">
  <a href="#/todos/{{todo.id}}">{{todo.title}}</a>
  <p>{{todo.description}}</p>
</li>

在我的待办事项模型中,我的属性优先级可以是“紧急”、“不那么重要”或“正常”,我只想为每个元素分配类。

我知道我可以为布尔值执行此操作,ng-class="{'urgent': todo.urgent}" 但我的变量不是布尔值,而是具有三个值。我该怎么做?另请注意,我不想使用ng-style="...",因为我的课程会改变几个视觉事物。

4

4 回答 4

90

您可以简单地将函数分配为表达式并从那里返回适当的类。 编辑:动态类也有更好的解决方案。请参阅下面的注释。

视图片段:

<div ng-class="appliedClass(myObj)">...</div>

在控制器中:

$scope.appliedClass = function(myObj) {
    if (myObj.someValue === "highPriority") {
        return "special-css-class";
    } else {
        return "default-class"; // Or even "", which won't add any additional classes to the element
    }
}

这样做的更好方法

我最近了解了另一种方法。您传入一个对象,该对象具有与您操作的类相对应的属性,并且值是表达式或布尔变量。一个简单的例子:

ng-class="{ active: user.id == activeId }"

在这种情况下active,只要与对象user.id匹配activeId,就会将类添加到元素中$scope

于 2013-02-01T10:30:28.640 回答
44

如果您只想添加一个类,请使用class带有插值的属性:

class="priority-is-{{todo.priority}}"
于 2014-02-20T12:10:24.983 回答
10

你几乎明白了 :)
它应该没有插值标记({{}}):

<li ng-repeat="todo in todos" ng-class="todo.priority">
...
于 2013-12-13T15:49:55.850 回答
0

您可以动态地使用三元组来执行此操作。

ng-class="service.Icon != '' ? service.Icon : 'fas fa-arrow-alt-circle-right'"

上面的代码将注入存储在 Icon 中的类,如果它不为空,如果不包含它,则默认为第二个。

这将允许多个类。

如果状态发生任何变化,您在数据绑定实例中调用 function() 的上述答案可能会导致文档消费循环。如果您要在其中写入控制台,您可能会发现您的页面在停止循环之前被渲染了 100 次。

注意:使用三元时不要将对象 {} 放在它周围。你会得到错误。

于 2020-06-18T17:02:21.360 回答