Itens de contorno condicional de repetição ng Angular no elemento (itens de grupo em ng-repeat)

Estou tentando agrupar os itens em uma repetição usando uma condição.

Uma condição de exemplo é agrupar todos os elementos com a mesma hora.

Os dados:

[ {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'}, ... ] 

O campo ‘time’ é, na verdade, um registro de data e hora (1399372207), mas com o tempo exato em que a saída de exemplo é mais fácil de entender.

Estou listando esses itens usando ng-repeat:

 

{{r.name}}

também tentei com:

 

{{r.name}}

Uma saída válida é:

 

AAA

BBB

CCC

DDD

EEE

Minha última opção, se não houver uma solução simples para o meu problema, seria agrupar os dados e, em seguida, atribuí-los à variável de escopo usada em ng-repeat.

Alguma ideia?

Você pode usar o filtro groupBy do módulo angular.filter .
então você pode fazer algo assim:

uso: collection | groupBy:property collection | groupBy:property
usar propriedade aninhada com notação de ponto: 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:

 
    Group name: {{ key }}
  • player: {{ player.name }}

RESULTADO:
Nome do grupo: alpha
* jogador: Gene
Nome do grupo: beta
* jogador: George
* jogador: Paula
Nome do Grupo: gama
* jogador: Steve
* jogador: Scruath

ATUALIZAÇÃO: jsbin

Primeiro faça grupo no 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(); }; 

Em seguida, faça um filtro para isso:

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

Então mude o molde:

  

{{r.name}}

VER DEMO

Apenas uma solução HTML simples para grupos estáticos.

 
    Group name: Football
  • Player Name: {{ player.name }}
  • Group name: Basketball
  • Player Name: {{ player.name }}

Saída:

Nome do Grupo: Football
– Nome do Jogador: Nikodem
– Nome do Jogador: Lambert
Nome do Grupo: Basquete
– Nome do Jogador: John
– Nome do Jogador: Izaäk
– Nome do Jogador: Dionisia