2016-03-25 20 views
7

Używam filtru z filtrem groupBy.Czy mogę grupować według wielu pól przy użyciu filtru kątowego?

Przykład z GitHub:

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

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

więc, przykładowe grupy kolekcja graczy przez zespołu. Wyobraź sobie, że AN wiek nieruchomość dla każdego obiektu zawodnik:

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

Chcę grupy przez zespołu i wieku. Jak mogę to zrobić?

+0

Czy próbowałeś tylko dodawanie kolejnego groupBy? –

+0

Jakie są oczekiwane wyniki? Co próbujesz? Wygląda na to, że zagnieżdżone 'groupBy' zrobi to, czego potrzebujesz – charlietfl

Odpowiedz

13

przykład z wielu pól

angular.module('app',['angular.filter']) 
 
    .controller('MainController', function($scope) { 
 
    $scope.players = [ 
 
     {name: 'Gene', team: 'alpha', age: 19}, 
 
     {name: 'George', team: 'beta', age: 19}, 
 
     {name: 'Steve', team: 'gamma', age: 23}, 
 
     {name: 'Paula', team: 'beta', age: 23}, 
 
     {name: 'Scruath', team: 'gamma', age: 23} 
 
    ]; 
 
});
<!DOCTYPE html> 
 
<html ng-app="app"> 
 
<head> 
 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js"></script> 
 
    <script src="//cdnjs.cloudflare.com/ajax/libs/angular-filter/0.4.7/angular-filter.js"></script> 
 
    
 
<meta name="description" content="[groupBy example]"/> 
 
    <meta charset="utf-8"> 
 
    <title>JS Bin</title> 
 
</head> 
 
<body> 
 
    <div ng-controller="MainController"> 
 

 
<ul ng-repeat="(key, value) in players | groupBy: '[team,age]'"> 
 
    <b>Group name: {{key}}</b> 
 
    <br> 
 
    <li ng-repeat="player in value"> 
 
    <b>player:</b> {{ player.name }} 
 
    <br> 
 
    <b>team:</b> {{player.team}} 
 
    <br> 
 
    <span ng-if="player.age"><b>age:</b> {{ player.age }}</span> 
 
    </li> 
 
</ul> 
 
    </div> 
 
</body> 
 
</html>

+0

Jak uzyskać dostęp do wielu kluczy oddzielnie w swoim html? Klucz wydaje się być ciągiem "zespołu, wieku", czy muszę go podzielić? {{key.team}} jest niezdefiniowany. itp. –

+0

Aby odpowiedzieć na mój komentarz: '{{value [0] .team}}' and '{{value [0] .age}}' zrobi lewy. Z groupby powinieneś móc liczyć na co najmniej jeden rząd na "drużynę" i "wiek" (lub grupę), więc nie musisz sprawdzać 'count> 0'. Daleki od elegancji, ale powinien działać i być niezawodny. Żałuję, że klucz nie stanie się żargonem lub czymś innym, gdy użyjemy wielu pól dla klucza. –

2

wypróbować następujące jestem zakładając chcesz grupy mają być tworzone przy użyciu wielu wartości jako kryteria

ng-repeat="(key, value) in players | groupBy: '[team,age]'" 
+0

To nie daje odpowiedzi na pytanie. Po uzyskaniu wystarczającego [reputation] (http://stackoverflow.com/help/whats-reputation) będziesz mógł [komentować dowolny wpis] (http://stackoverflow.com/help/privileges/comment); zamiast tego [dostarczaj odpowiedzi, które nie wymagają wyjaśnień od pytającego] (http://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-zamiast). - [Z recenzji] (/ review/low-quality-posts/11993005) – Alexei

+0

przepraszam. tylko próbuję pomóc –