ngClass
指令允许我们基于表达式的结果为指定 DOM 对象添加/删除 CSS class
例如,若 expression
为 true
,为元素添加 class="class-a"
:
<div ng-class="{ class-a: expression }"></div>
同时,多个 class 可以分别基于多个表达式的结果:
<div ng-class="{ class-a: expressionA, class-b: expressionB }"></div>
然而,如果我们希望在基于一个表达式的结果的前提下,同时添加/删除多个 CSS class 该如何做呢?一般来说我们首先会想到这样写:
<div ng-class="{ class-a: expression, class-b: expression }"></div>
这样可不可以?可以但是很不好,不推荐这样做的原因主要有两点:
expression
重复了两次,违背了 DRY(Don't Repeat Yourself) 原则expression
也会被重复求职,增加了性能消耗
那么,该如何写比较好呢?很简单:
<div ng-class="{ 'class-a class-b': expression }"></div>
这是推荐的写法。
不过你不一定知道的是,其实可以这么写(在实践中要谨慎使用):
<div class="{{ expression && 'class-a class-b' }}"></div>
注意我们没有使用 ngClass
指令,而是用普通的 class
+ AngularJS 表达式来实现。这个例子也体现了 AngularJS 表达式的灵活性。