最好的条件应用类的方法是什么?
最好的条件应用类的方法是什么?
假设你有一个数组,在一个带有每个元素的li
的ul
中呈现,并且控制器上有一个名为selectedIndex
的属性。在AngularJS中,最好的方法是为具有索引selectedIndex
的li
添加类是什么?
我目前正在手动复制li
代码,并将类添加到一个li
标签中,并使用ng-show
和ng-hide
仅显示每个索引的一个li
。
admin 更改状态以发布 2023年5月21日
ng-class支持一个表达式,其必须评估为以下之一:
- 由空格分隔的类名字符串,或
- 类名数组,或
- 类名到布尔值的映射/对象。
因此,使用第3种形式,我们可以简单地写成
ng-class="{'selected': $index==selectedIndex}"
另请参阅如何在AngularJS中有条件地应用CSS样式? 的更广泛的答案。
更新:Angular 1.1.5添加了对三元运算符的支持,因此如果该构造对您更熟悉:
ng-class="($index==selectedIndex) ? 'selected' : ''"
如果你不想像我一样在控制器中放置CSS类名,这里有一个我自v1版本之前就在使用的老技巧。我们可以编写一个直接评估所选类名的表达式,无需自定义指令:
ng:class="{true:'selected', false:''}[$index==selectedIndex]"
请注意这是使用冒号的旧语法。
还有一种更好的条件应用类的方法,如:
ng-class="{selected: $index==selectedIndex}"
Angular现在支持返回对象的表达式。该对象的每个属性(名称)现在都被视为一个类名,并根据其值应用。
然而,这些方法在功能上不等同。以下是一个例子:
ng-class="{admin:'enabled', moderator:'disabled', '':'hidden'}[user.role]"
因此,我们可以通过将模型属性映射到类名来重用现有的CSS类,并同时避免将CSS类放入控制器代码中。