Sie können groupBy des Angular.filter- Moduls verwenden.
Sie können also so etwas tun:
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>
ERGEBNIS: Gruppenname:
Alpha
* Spieler: Gen
Gruppenname
: Beta
* Spieler: George
* Spieler: Paula Gruppenname
: Gamma
* Spieler: Steve
* Spieler: Scruath
UPDATE: jsbin Beachten Sie die grundlegenden Anforderungen, die verwendet werden angular.filter
müssen. Beachten Sie insbesondere, dass Sie diese zu den Abhängigkeiten Ihres Moduls hinzufügen müssen:
(1) Sie können den Winkelfilter mit 4 verschiedenen Methoden installieren:
- Klonen und erstellen Sie dieses Repository
- via Bower: Wenn Sie $ bower ausführen, installieren Sie den Winkelfilter von Ihrem Terminal aus
- via npm: Wenn Sie $ npm ausführen, installieren Sie den Winkelfilter von Ihrem Terminal
- über cdnjs http://www.cdnjs.com/libraries/angular-filter
(2) Fügen Sie angular-filter.js (oder angle-filter.min.js) in Ihre index.html ein, nachdem Sie Angular selbst eingefügt haben.
(3) Fügen Sie 'Angular.filter' zur Abhängigkeitsliste Ihres Hauptmoduls hinzu.
angular.filter
Modul beizufügen.key
als Objekt machen möchte . Viel Glück von Ihrer SeiteZusätzlich zu den oben akzeptierten Antworten habe ich mithilfe der Bibliothek underscore.js einen generischen 'groupBy'-Filter erstellt.
JSFiddle (aktualisiert): http://jsfiddle.net/TD7t3/
Der Filter
Beachten Sie den Aufruf 'merken'. Diese Unterstrichmethode speichert das Ergebnis der Funktion im Cache und verhindert, dass Angular den Filterausdruck jedes Mal auswertet, wodurch verhindert wird, dass Angular die Digest-Iterationsgrenze erreicht.
Das HTML
Wir wenden unseren Filter 'groupBy' auf die Bereichsvariable teamPlayers in der Eigenschaft 'team' an. Unsere ng-Wiederholung erhält eine Kombination von (Schlüssel, Werte []), die wir in unseren folgenden Iterationen verwenden können.
Update 11. Juni 2014 Ich habe die Gruppe nach Filter erweitert, um die Verwendung von Ausdrücken als Schlüssel (z. B. verschachtelte Variablen) zu berücksichtigen. Der eckige Analyseservice ist hierfür sehr praktisch:
Der Filter (mit Ausdrucksunterstützung)
Der Controller (mit verschachtelten Objekten)
Das HTML (mit sortBy Ausdruck)
JSFiddle: http://jsfiddle.net/k7fgB/2/
quelle
Machen Sie zuerst eine Schleife mit einem Filter, der nur eindeutige Teams zurückgibt, und dann eine verschachtelte Schleife, die alle Spieler pro aktuellem Team zurückgibt:
http://jsfiddle.net/plantface/L6cQN/
html:
Skript:
quelle
Ich habe ursprünglich die Antwort von Plantface verwendet, aber mir hat nicht gefallen, wie die Syntax aus meiner Sicht aussah.
Ich habe es überarbeitet, um mit $ q.defer die Daten nachzubearbeiten und eine Liste mit eindeutigen Teams zurückzugeben, die dann als Filter verwendet wird.
http://plnkr.co/edit/waWv1donzEMdsNMlMHBa?p=preview
Aussicht
Regler
quelle
Beide Antworten waren gut, deshalb habe ich sie in eine Direktive verschoben, damit sie wiederverwendbar ist und keine zweite Bereichsvariable definiert werden muss.
Hier ist die Geige, wenn Sie möchten, dass sie implementiert wird
Unten ist die Richtlinie:
Dann kann es wie folgt verwendet werden:
quelle
Aktualisieren
Ich habe diese Antwort ursprünglich geschrieben, weil die alte Version der von Ariel M. vorgeschlagenen Lösung in Kombination mit anderen
$filter
s einen " Infite $ diggest Loop Error " (infdig
) auslöste . Glücklicherweise wurde dieses Problem in der neuesten Version des Angular.Filters behoben .Ich schlug die folgende Implementierung vor, die dieses Problem nicht hatte :
Diese Implementierung funktioniert jedoch nur mit Versionen vor Angular 1.3. (Ich werde diese Antwort in Kürze aktualisieren und eine Lösung bereitstellen, die mit allen Versionen funktioniert.)
Ich habe tatsächlich einen Beitrag über die Schritte geschrieben, die ich unternommen habe, um dies zu entwickeln
$filter
, die Probleme, auf die ich gestoßen bin, und die Dinge, die ich daraus gelernt habe .quelle
angular-filter
Version an - 0.5.0, es gibt keine Ausnahme mehr.groupBy
kann mit jedem Filter verkettet werden. Außerdem sind Sie großartige Testfälle, die erfolgreich abgeschlossen wurden - hier ist ein Plunker. Danke.Zusätzlich zur akzeptierten Antwort können Sie diese verwenden, wenn Sie nach mehreren Spalten gruppieren möchten :
quelle
Wenn Sie das in js Code brauchen. Sie können die injizierte Methode der Angula-Filter-Bibliothek verwenden. So was.
https://github.com/a8m/angular-filter/wiki/Common-Questions#inject-filters
quelle