Angular JS - 复合多重顺序在ng-repeat上

时间:2013-07-09 08:53:06

标签: angularjs

我正在尝试显示一个电影列表,每个电影都有一个标题,系列名称和一个系列号。

我想要订购这些电影的方式是将具有相同系列的电影组合在一起,并按照其序列号在该组内进行排序。整个列表按标题排序(除非电影有一个系列名称,在这种情况下,它显然按系列名称排序)。例如,如果我有以下电影:

Up ( no series )
500 Days of Summer ( no series)
Alien ( series: 'Alien', seriesnumber: 1 )
Aliens ( series: 'Aliens', seriesnumber: 2 )
Alien Resurrection ( series: 'Alien Resurrection, 'seriesnumber: 4 )
Alien 3 ( series: 'Alien 3, 'seriesnumber: 3 )

他们将被命令为:

500 Days of Summer
Alien
Aliens
Alien 3
Alien Resurrection
Up

我已经在我的SQL查询中实现了这个排序,所以我可以按照预期的顺序显示这些项目,只要我不对ng-repeat应用任何过滤器。 (对于那些想知道的人,SQL查询ORDER BY是:

ORDER BY CASE WHEN seriesName is NOT NULL THEN seriesName ELSE title END

有什么办法可以通过使用ng-repeat的顺序来获得这种排序吗?我希望在ng-repeat中使用它的唯一原因是用户可以添加标题,并且当它们被添加时它们被正确排序 - 所以如果有另一种方法来获得该解决方案,那将是值得赞赏的。

2 个答案:

答案 0 :(得分:2)

是的,你可以介绍

$scope.decoratedName = function(title, seriesnumber) {
    return title + '-' + seriesnumber;
}

然后使用ng-repeat ... orderBy:decoratedName(title, seriesnumber)

答案 1 :(得分:0)

orderBy还有一个数组可以为你节省一些JavaScript:

<div ng-repeat="data in datum | orderBy: ['name', 'ip']">

见这里:http://jsfiddle.net/xjcw6/