Cat*_*ANU 54 angularjs ng-repeat angularjs-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'},
...
]
Run Code Online (Sandbox Code Playgroud)
'time'字段实际上是一个时间戳(1399372207),但是确切的时间示例输出更容易理解.
我使用ng-repeat列出这些项目:
<div ng-repeat="r in data| orderBy:sort:direction">
<p>{{r.name}}</p>
</div>
Run Code Online (Sandbox Code Playgroud)
还尝试过:
<div ng-repeat-start="r in data| orderBy:sort:direction"></div>
<p>{{r.name}}</p>
<div ng-repeat-end></div>
Run Code Online (Sandbox Code Playgroud)
有效输出是:
<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>
Run Code Online (Sandbox Code Playgroud)
如果我的问题没有简单的解决方案,我的最后一个选择是对数据进行分组,然后将其分配给ng-repeat中使用的范围变量.
有什么想法吗?
a8m*_*a8m 146
您可以使用angular.filter模块的groupBy过滤器.
所以你可以这样做:
用法: 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'}
];
Run Code Online (Sandbox Code Playgroud)
HTML:
<ul ng-repeat="(key, value) in players | groupBy: 'team'">
Group name: {{ key }}
<li ng-repeat="player in value">
player: {{ player.name }}
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
结果:
组名:alpha
*player:Gene
组名:beta
*球员:George
*球员:Paula
组名:gamma
*球员:Steve
*球员:Scruath
更新: jsbin
Nit*_*mar 18
首先在Controller中制作组:
$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();
};
Run Code Online (Sandbox Code Playgroud)
然后为它做一个过滤器:
myApp.filter('groupby', function(){
return function(items,group){
return items.filter(function(element, index, array) {
return parseInt(element.time)==group;
});
}
}) ;
Run Code Online (Sandbox Code Playgroud)
然后更改模板:
<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>
Run Code Online (Sandbox Code Playgroud)
看看演示