复杂的angular度js ng级
我有组件,并有一个问题设置为它的CSS类。 我希望它总是有一个“框”类,然后有指令“class”参数指定的附加类和一个条件类“mini”。
从概念上说,我想要达到的是这样的:
<div class="box {{class}}" data-ng-class="{mini: !isMaximized}"> ... </div>
问题是,当我设置类的HTML属性,ng-class属性被省略。 如何让我的例子在不更改控制器的情况下工作? 这是甚至可能的,还是应该在控制器中设置类(而我希望避免)?
我需要多个类,其中一个是派生的$范围,其他是文字类。 感谢安德烈的提示,下面为我工作。
<h2 class="{{workStream.LatestBuildStatus}}" ng-class="{'expandedIcon':workStream.isVisible, 'collapsedIcon':!workstream.isvisible}">{{workStream.Name}}</h2>
一个快速的解决scheme是定义ng-class属性中的box类:
<div data-ng-class="{mini: !isMaximized, box: true}"></div>
如果你想包含一个范围variables作为一个类,你不能使用ng-class:
<div class="{{class}} box {{!isMaximized && 'mini' || ''}}">
Angularexpression式不支持三元运算符,但可以这样模拟:
条件&&(如果为真)|| (如果错误,则回答)
编辑:对于Angular的新版本,请参阅Nitins的答案,因为它是最好的一个atm
对我来说,这工作(我目前在AngularJS v1.2.14上工作,所以我猜1.2.X +应该支持这一点,不知道以前的版本):
<div class="box" data-ng-class="{ {{myScopedObj.classesToAdd}}: true, mini: !isMaximized }"></div>
我用{{myScopedObj.classesToAdd}}
replace了你的{{class}}
,以显示任何范围的variables,甚至更复杂的对象都可以这样使用。
因此,这种方式创build的每个DIV元素都将具有“box”类和myScopedObj.classesToAdd
包含的任何类(在使用ng-repeat时很有用,并且数组中的每个元素都需要应用不同的类),并且它将具有“迷你“课如果!isMaximized
。
另一种方法来做到这一点,没有双花括号,并包括范围variables,用angular度v1.2 +进行testing。
<div ng-class="['box', aClass, {true:'large': false: 'mini'}[isMaximized]]"></div>
这也是相当不错的,因为variables可以使用不同的types作为索引而不会增加使用三元组的复杂度。 它也可以消除任何需要否定;) 这是一个小提琴的链接
你可以使用下面给出的简单expression式
ng-class="{'active' : itemCount, 'activemenu' : showCart}"