AngularJs - ngOptions:如何按组名排序,然后按标签排序

时间:2013-06-12 21:29:33

标签: javascript angularjs sorting

假设我有以下数据格式:

var data = [{group:GroupA, label: BB}, {group:GroupB, label: DD}.....].

我的绑定类似于:

<select data-ng-options="c as c.label group by c.group for c in data"></select>

我希望下拉列表在GroupB之前列出GroupA的所有项目,同时让它们也在每个组下排序。

像这样。

GroupA
AA
BB
CC

GroupB
DD
EE
FF

我知道我可以使用orderBy Angular过滤器,但这并不是我需要的方式。我的猜测是我必须编写一个自定义过滤器,按照我想要的方式手动排序列表,但我想知道是否有更简单的方法来完成任务。

2 个答案:

答案 0 :(得分:50)

orderBy可以采用多个参数的数组来排序。所以你可以这样做:

c as c.label group by c.group for c in data | orderBy:['group','label']

Here is a fiddle

答案 1 :(得分:1)

似乎orderBy可以完全按照您的意愿运作。

只需要表达并在最后添加orderBy:

c as c.label group by c.group for c in data | orderBy:'label'

这将首先按照每个项目的data属性的值对label数组进行排序,然后对它们进行分组。由于数据将被正确排序,因此每个组都会正确显示排序。

Here's a fiddle.

注意初始数组是如何按向后顺序定义的,但是在select中的每个组中都正确排序。