ng-class 中的 angularjs 表达式语法是啥

Posted

技术标签:

【中文标题】ng-class 中的 angularjs 表达式语法是啥【英文标题】:What angularjs expression syntax is this in ng-classng-class 中的 angularjs 表达式语法是什么 【发布时间】:2013-01-22 00:23:39 【问题描述】:

AngularJS Noob Handbook 有一些代码可以将类操作简化为简单的表达式和绑定:

<a ng-click="flags.open=!flags.open">...<div ng-class="active:flags.open">

但是,ng-class 中的表达式语法是什么?我知道竖线 (|) 将通过过滤器,并且过滤器可以在冒号后传递参数,但上面的代码正在做一些不同的事情。如果右侧的范围变量计算结果为 true,则包含左侧的表达式,否则将其删除。

这是特定于 ng-class 指令的吗? http://docs.angularjs.org 上是否有一些文档可以解释这一点?

【问题讨论】:

特定于 ng-class。另见***.com/a/12151555/215945 【参考方案1】:

ngClass documentation 中简要提到了这一点(我认为太简单了)。如果您将一个对象传递给ngClass,那么如果该键的 为真,它将将该对象的每个 作为一个类应用于元素。例如:

$scope.first = true
$scope.second = false
$scope.third = true

<div ng-class="a: first, b: second, c: third"></div>

会导致

<div class="a c"></div>

【讨论】:

(facepalm) 啊...我现在在文档中看到它 - “类名到布尔值的映射。”这真的不明显,但我也应该扫描到 cmets。感谢 Brandon 和 @Mark - 我在 *** 中看到你们很多订阅了 AngularJS 标签,你们都得到了一流的帮助。 记住 - 如果你的类名包含连字符,你必须在它周围加上引号!如&lt;div ng-class="'a-1': first, 'last-item': second"&gt;&lt;/div&gt;【参考方案2】:

你可能也见过这样的东西:

<div ng-class="true: 'complete'[item.Id != 0]"></div>

非常优雅的语法。

编辑: 这里发生的是“completeclass 被添加到元素if(item.Id != 0)。或者,我们可以写:&lt;div ng-class="false: 'cookieless'[monsterEatsCookies('Elmo')]。由于它由 monsterEatsCookies 函数决定,Elmo 不吃饼干,因此由于该函数返回 falsehtml 元素获得了一个名为 cookieless 的类。

一个简单的例子:&lt;div ng-class="false: 'DoubleNegative'[1 == 0]1 !== 0 即“false”——将“DoubleNegative”类添加到元素中。

<div ng-class="  true:   'complete'   [item.Id != 0]"></div>

`

            | |      | |          | | |            |
            | |result| |className | | |            |
            |                     | | |            |
            |       function      | | | condition  |

附录

另外,我刚刚意识到您可以使用各种不同的键来映射到您的情况。例如:

ng-class=" true: 'highlight', undefined: 'mute' [ item.hasValue ]"

如果项目没有“hasValue”属性,则将应用 mute 类。此外,您可以为任何给定的类型或值应用一个类:

'Jonathan Chapman': 'embolden', '[object Object]': 'hide'[ item.toString() ]

在以下集合中,这会在隐藏作为对象的项目时增加人名:

[
    'Jonathan Chapman',
     aka: 'Johnny Applyseed' ,
    'Brad Pitt',
     details: 'Fights Zombies' 
]

有了这个,你可以观察任何 $scope 属性中的特定值。我想这有时会派上用场。

干杯

【讨论】:

如果您能为我和其他未来的读者解释该语法的作用以及原因,那就太好了。 那么,对象/地图后面的括号表达式是条件吗?该语法实际上是否记录在任何地方?谢谢! 实际上,我无法找到任何关于此的文档,但我可以保证它有效。一位同事把我带到了这里,它完全为我们节省了大量使用 jQuery 元素选择器的工作。我们需要的一切都是数据绑定的。 ng-class 中是否可以有多个条件。我正在寻找一个具有不同 css 待处理的项目的样式。这可能吗?我试过 true: 'complete' [item.Id == 0] , true: 'failed' [item.Id == 1] 但它不起作用 感谢您的解释!这节省了很多时间。【参考方案3】:
ng-click="flags.open=!flags.open"

flags.open 的值切换为真或假。 还有

ng-class="active:flags.open"  

根据flags.open 的值确定类active 是否存在。 请参阅Fiddle 演示上述示例。

【讨论】:

【参考方案4】:

像下面这个例子:

div(ng-class=" condition ? ['class_one', 'class_two'] : ['class_three', 'class_four']")

【讨论】:

【参考方案5】:

以下是使用过滤器传递表达式的方法:

 <div ng-class=" 'customer-page': ('customer' | isRoute), 
  'orders-page': ('orders' | isRoute)  ">....</div>

【讨论】:

以上是关于ng-class 中的 angularjs 表达式语法是啥的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS之ng-class

ng-click中的三元表达式在angularjs中

在使用混合表达式的同时使用带角度与 ng-class 的类

html ng-class angularjs

使用 ng-class 的 AngularJS 切换类

angularjs 指令之ng-class