元素中的Ang-ng重复条件包装项(ng-repeat中的组项)

我试图用一个条件来分组ng-repeat。

一个示例条件是将所有元素分组在同一小时。

数据:

[ {name: 'AAA', time: '12:05'}, {name: 'BBB', time: '12:10'}, {name: 'CCC', time: '13:20'}, {name: 'DDD', time: '13:30'}, {name: 'EEE', time: '13:40'}, ... ] 

“时间”字段实际上是一个时间戳(1399372207),但输出示例的确切时间更易于理解。

我使用ng-repeat列出这些项目:

 <div ng-repeat="r in data| orderBy:sort:direction"> <p>{{r.name}}</p> </div> 

也尝试过:

 <div ng-repeat-start="r in data| orderBy:sort:direction"></div> <p>{{r.name}}</p> <div ng-repeat-end></div> 

有效的输出是:

 <div class="group-class"> <div><p>AAA</p></div> <div><p>BBB</p></div> </div> <div class="group-class"> <div><p>CCC</p></div> <div><p>DDD</p></div> <div><p>EEE</p></div> </div> 

我的最后一个select,如果没有一个简单的解决scheme,我的问题是将数据分组,然后将其分配给ng-repeat中使用的范围variables。

有什么想法吗?

你可以使用angular.filter模块的groupByfilter。
所以你可以做这样的事情:

用法: collection | groupBy:property collection | groupBy:property
使用点符号的嵌套属性: property.nested_property
JS:

 $scope.players = [ {name: 'Gene', team: 'alpha'}, {name: 'George', team: 'beta'}, {name: 'Steve', team: 'gamma'}, {name: 'Paula', team: 'beta'}, {name: 'Scruath', team: 'gamma'} ]; 

HTML:

 <ul ng-repeat="(key, value) in players | groupBy: 'team'"> Group name: {{ key }} <li ng-repeat="player in value"> player: {{ player.name }} </li> </ul> 

结果:
组名:alpha
*球员:基因
组名:beta
*球员:乔治
*球员:宝拉
组名:伽马
*球员:史蒂夫
*播放器:Scruath

更新: jsbin

首先在控制器中创build组:

  $scope.getGroups = function () { var groupArray = []; angular.forEach($scope.data, function (item, idx) { if (groupArray.indexOf(parseInt(item.time)) == -1) { groupArray.push(parseInt(item.time)); } }); return groupArray.sort(); }; 

然后为它做一个filter:

  myApp.filter('groupby', function(){ return function(items,group){ return items.filter(function(element, index, array) { return parseInt(element.time)==group; }); } }) ; 

然后更改模板:

  <div ng-repeat='group in getGroups()'> <div ng-repeat="r in data | groupby:group" class="group-class"> <div><p>{{r.name}}</p></div> </div> </div> 

看DEMO