Comment puis-je grouper des données avec un filtre Angulaire?
J'ai une liste de joueurs qui appartiennent à un groupe. Comment puis-je utiliser un filtre à la liste des utilisateurs par groupe?
[{name: 'Gene', team: 'team alpha'},
{name: 'George', team: 'team beta'},
{name: 'Steve', team: 'team gamma'},
{name: 'Paula', team: 'team beta'},
{name: 'Scruath of the 5th sector', team: 'team gamma'}];
Je suis à la recherche de ce résultat:
- de l'équipe alpha
- Gène
- de l'équipe de bêta
- George
- Paula
- équipe gamma
- Steve
- Scruath de la 5ème secteur
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser groupBy de angulaire.filtre module.
si vous pouvez faire quelque chose comme ceci:
JS:
HTML:
RÉSULTAT:
Nom du groupe: alpha
* joueur: Gène
Nom du groupe: bêta
* joueur: George
* joueur: Paula
Nom du groupe: gamma
* joueur: Steve
* joueur: Scruath
Mise à JOUR: jsbin Rappeler les exigences de base pour l'utilisation
angular.filter
, spécifiquement remarque vous devez l'ajouter à votre module de dépendances:angular.filter
module.<ul ng-repeat="(key, value) in players | groupBy: 'team'">
groupBy: 'team || age'
. voici quelques violon pour le démontrer. Merci.groupId
etgroupName
puis-je inclure ces propriétés dans "key
", afin que je puisse accéder àkey.groupId
etkey.groupName
key
en tant qu'objet . aucune chance de vous côtéEn plus les réponses acceptées ci-dessus, j'ai créé un générique de 'groupe' filtre à l'aide de la underscore.js de la bibliothèque.
JSFiddle (mis à jour):
http://jsfiddle.net/TD7t3/
Le filtre
Note le "memoize' appel. Ce trait de soulignement méthode met en cache le résultat de la fonction et s'arrête angulaire de l'évaluation de l'expression de filtre à chaque fois, l'empêchant ainsi angulaire d'atteindre le digérer itérations limite.
Le code html
Nous appliquer notre "groupe" filtre sur le teamPlayers portée variable, sur la "team" de la propriété. Notre ng-repeat reçoit une combinaison de touche, les valeurs de[]) que nous pouvons utiliser dans notre itérations suivantes.
Mise à jour le 11 juin 2014
J'ai élargi le groupe par le filtre de prendre en compte l'utilisation d'expressions comme la clé (par exemple imbriqués les variables). L'angle d'analyser le service est très pratique pour cela:
Le filtre (avec support des expressions)
Le contrôleur (avec des objets imbriqués)
Le html (avec sortBy expression)
JSFiddle:
http://jsfiddle.net/k7fgB/2/
_.memoize( ... , function (items, field) { return _.pluck(items,'name').toString() + '-' + field})
. Cette SORTE de réponse un peu plus en détail: stackoverflow.com/a/16513030/490592D'abord de faire une boucle à l'aide d'un filtre de retour seulement unique équipes, puis une boucle imbriquée qui renvoie tous les joueurs par equipe actuelle:
http://jsfiddle.net/plantface/L6cQN/
html:
script:
J'ai d'abord utilisé Plantface réponse, mais je n'aimais pas la façon dont la syntaxe regardé dans mon point de vue.
J'ai retravaillé à utiliser q$.reporter de post-traiter les données et retourner une liste unique équipes, ce qui est utilise comme le filtre.
http://plnkr.co/edit/waWv1donzEMdsNMlMHBa?p=preview
Vue
Contrôleur
Les deux réponses étaient bonnes donc je l'ai déplacé dans une directive, de sorte qu'il est réutilisable et une deuxième portée variable n'a pas à être défini.
Voici le violon si vous voulez le voir mis en œuvre
Ci-dessous est la directive:
Alors il peut être utilisé comme suit:
Mise à jour
J'ai d'abord écrit cette réponse parce que l'ancienne version de la solution proposée par M. Ariel lorsqu'il est combiné avec d'autres
$filter
s déclenché une "Infite $diggest Boucle d'Erreur" (infdig
). Heureusement, ce problème a été résolu dans la dernière version de la angulaire.filtre.J'ai suggéré à la suite de la mise en œuvre, que de ne pas avoir ce problème:
Toutefois, cette application fonctionne uniquement avec les versions antérieures à Angulaires 1.3. (Je mettrai à jour cette réponse peu de temps fournissant une solution qui fonctionne avec toutes les versions.)
En fait, j'ai a écrit un post sur les étapes que j'ai pris pour développer ce
$filter
, les problèmes que j'ai rencontrés et les choses que j'ai appris d'elle.angular-filter
de la version 0.5.0, il n'y a plus d'exception.groupBy
peut être à chaîne avec n'importe quel filtre. aussi, vous êtes grand cas de test se termine avec succès - voici un plunker Merci.En plus de la accepté de réponse, vous pouvez utiliser cette option si vous souhaitez les regrouper par plusieurs colonnes:
Si vous avez besoin que dans le code js. Vous pouvez utiliser injecté méthode de angula-filtre lib.
Comme cette.
https://github.com/a8m/angular-filter/wiki/Common-Questions#inject-filters