AngularJS ngClass表达式可以嵌套吗?

AngularJS ngClass表达式可以嵌套吗?,angularjs,Angularjs,我是AngularJS的新手,在继承的一个应用程序(最初由第三方为我们开发)上被分配了维护任务 在表格标题行的左侧有一个小按钮,显示加号(+)或减号(-),以指示单击时是否展开或折叠该部分。它使用ngClass实现这一点,如下所示 ng-class="{false:'icon-plus',true:'icon-minus'}[day.expanded]" 当节中没有数据,因此无法展开时,我必须删除该按钮。已经有一个类(.plus占位符)用于此,我想知道ngClass使用的表达式是否可以嵌套以允

我是AngularJS的新手,在继承的一个应用程序(最初由第三方为我们开发)上被分配了维护任务

在表格标题行的左侧有一个小按钮,显示加号(+)或减号(-),以指示单击时是否展开或折叠该部分。它使用ngClass实现这一点,如下所示

ng-class="{false:'icon-plus',true:'icon-minus'}[day.expanded]"
当节中没有数据,因此无法展开时,我必须删除该按钮。已经有一个类(.plus占位符)用于此,我想知道ngClass使用的表达式是否可以嵌套以允许类似的内容

ng-class="{false:'plus-placeholder',true:{false:'icon-plus',true:'icon-minus'}[day.expanded]}[day.hasTrips]"
ng-class="{'collapsed':'icon-plus','expanded':'icon-minus','empty':'plus-placeholder'}[day.expandoState]" 
这将允许我将
hasttrips
属性添加到
day
以完成任务

如果这是不可能的,我想我需要添加一个属性,比如
expandoState
,它返回字符串“collapsed”、“expanded”和“empty”。所以我可以像这样编写ngClass

ng-class="{false:'plus-placeholder',true:{false:'icon-plus',true:'icon-minus'}[day.expanded]}[day.hasTrips]"
ng-class="{'collapsed':'icon-plus','expanded':'icon-minus','empty':'plus-placeholder'}[day.expandoState]" 

也许这在任何情况下都是一种更干净的方法。有什么想法/建议吗?如果相关,应用程序将使用AngularJS v1.0.2。

您当然可以执行您提到的两个选项之一。就可读代码而言,第二种方法远远优于第一种方法

您提到的
expandoState
属性可能应该是放置在作用域上的属性或方法。然后,您的属性将如下所示

ng-class="{'collapsed':'icon-plus','expanded':'icon-minus','empty':'plus-placeholder'}[expandoState()]"
要将此方法置于范围内,您需要找到相关的控制器。这可能是分配给范围的
day
。加上

$scope.expandoState = function() {
    // Return current state name, based on $scope.day
};

或者,您可以在控制器上编写一个方法,如

$scope.buttonClass = function() {
    // Return button class name, based on $scope.day
};
它只返回要使用的类。这将使您能够以更可读的方式编写第一个选项中的逻辑。然后你可以用

ng-class="buttonClass()"

谢谢,我特别喜欢最后一个选项。我创建了一个JSFIDLE来处理这个问题。它工作得很好。