复杂角度 js ng 类



我有这个组件,但在设置css类时遇到问题。我希望它始终有一个"box"类,然后具有由指令"class"参数和一个条件类"mini"指定的其他类。

从概念上讲,我想要实现的是这样的:

<div class="box {{class}}" data-ng-class="{mini: !isMaximized}">
...
</div>

问题是当我设置类 html 属性时,ng-class 属性被省略了。如何在不更改控制器的情况下使我的示例工作?甚至可能吗,或者我应该在控制器中设置类(我希望避免)?

一个快速的解决方案是在ng-class属性中定义盒子类:

<div data-ng-class="{mini: !isMaximized, box: true}"></div>

如果要将作用域变量作为类包含,则不能使用 ng-class:

<div class="{{class}} box {{!isMaximized && 'mini' || ''}}">

角度表达式不支持三元运算符,但可以像这样模拟:

条件&&(如果为真,则回答)||(如果回答错误)

我需要多个类,其中一个是$scope派生的,另一个是文字类。感谢安德烈的提示,下面对我有用。

<h2 class="{{workStream.LatestBuildStatus}}" 
    ng-class="{'expandedIcon':workStream.isVisible,  'collapsedIcon':!workstream.isvisible}">{{workStream.Name}}</h2>

编辑:对于较新版本的Angular,请参阅Nitins答案,因为它是最好的一个ATM

对我来说,这有效(我目前正在研究 AngularJS v1.2.14,所以我想 1.2.X+ 应该支持这一点,不确定早期版本):

<div class="box" data-ng-class="{ {{myScopedObj.classesToAdd}}: true, mini: !isMaximized }"></div>

我用{{myScopedObj.classesToAdd}}替换了您的{{class}},以表明任何作用域变量甚至更复杂的对象都可以以这种方式使用。

因此,以这种方式构建的每个 DIV 元素都将具有"box"类和包含在myScopedObj.classesToAdd中的任何类(在使用 ng-repeat 时很有用,数组中的每个元素都需要应用不同的类),如果!isMaximized,它将具有"迷你"类。

另一种不使用双花括号并包含作用域变量的方法,使用 angular v1.2+ 进行测试。

<div ng-class="['box', 
                aClass, 
               {true:'large': false: 'mini'}[isMaximized]]"></div>

这也相当不错,因为变量可以使用不同类型的索引,而不会增加使用三元的复杂性。它还可以消除任何否定的需要;)这是一个小提琴链接

您可以使用下面给出的简单表达式

ng-class="{'active' : itemCount, 'activemenu' : showCart}"

最新更新