Skip to content

Instantly share code, notes, and snippets.

@ikbear
Last active August 29, 2015 14:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ikbear/23a99d2ac13762ad26dd to your computer and use it in GitHub Desktop.
Save ikbear/23a99d2ac13762ad26dd to your computer and use it in GitHub Desktop.
ngClass - 多个 class 共享一个表达式

ngClass 指令允许我们基于表达式的结果为指定 DOM 对象添加/删除 CSS class

例如,若 expressiontrue,为元素添加 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>

这样可不可以?可以但是很不好,不推荐这样做的原因主要有两点:

  1. expression 重复了两次,违背了 DRY(Don't Repeat Yourself) 原则
  2. expression 也会被重复求职,增加了性能消耗

那么,该如何写比较好呢?很简单:

<div ng-class="{ 'class-a class-b': expression }"></div>

这是推荐的写法。

不过你不一定知道的是,其实可以这么写(在实践中要谨慎使用):

<div class="{{ expression && 'class-a class-b' }}"></div>

注意我们没有使用 ngClass 指令,而是用普通的 class + AngularJS 表达式来实现。这个例子也体现了 AngularJS 表达式的灵活性。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment