Ich versuche, einige Daten nach Eigenschaften zu sortieren. Hier ist ein Beispiel, von dem ich dachte, dass es funktionieren sollte, aber es funktioniert nicht.
HTML-Teil:
<div ng-app='myApp'>
<div ng-controller="controller">
<ul>
<li ng-repeat="(key, value) in testData | orderBy:'value.order'">
{{value.order}}. {{key}} -> {{value.name}}
</li>
</ul>
</div>
</div>
JS-Teil:
var myApp = angular.module('myApp', []);
myApp.controller('controller', ['$scope', function ($scope) {
$scope.testData = {
C: {name:"CData", order: 1},
B: {name:"BData", order: 2},
A: {name:"AData", order: 3},
}
}]);
Und das Ergebnis:
- A -> AData
- B -> BData
- C -> CData
... dass IMHO so aussehen sollte:
- C -> CData
- B -> BData
- A -> AData
Habe ich etwas verpasst (hier ist JSFiddle zum Experimentieren bereit )?
quelle
{1:'Example 1', 2:'Example 2', 3:'Example 3', ...}
for(var objectKey in input) { input[objectKey]['_key'] = objectKey; array.push(input[objectKey]); }
wie wir es verwenden können<div ng-repeat="value in object | orderObjectBy:'order'" ng-init="key = value['_key']">
... | orderBy: 'name'
.Es ist ziemlich einfach, mach es einfach so
quelle
Vergessen Sie nicht, dass parseInt () nur für Integer-Werte funktioniert. Um Zeichenfolgenwerte zu sortieren, müssen Sie Folgendes austauschen:
mit diesem:
quelle
Wie Sie im Code von angle-JS ( https://github.com/angular/angular.js/blob/master/src/ng/filter/orderBy.js ) sehen können, funktioniert ng-repeat nicht mit Objekten. Hier ist ein Hack mit sortFunction.
http://jsfiddle.net/sunnycpp/qaK56/33/
quelle
laut http://docs.angularjs.org/api/ng.filter:orderBy sortiert orderBy ein Array. In Ihrem Fall übergeben Sie ein Objekt, sodass Sie Ihre eigene Sortierfunktion implementieren müssen.
oder ein Array übergeben -
Schauen Sie sich http://jsfiddle.net/qaK56/ an.
quelle
Sie sollten Ihre JSON-Struktur wirklich verbessern, um Ihr Problem zu beheben:
Dann könnten Sie tun
Ich denke, das Problem ist, dass die Variablen (Schlüssel, Wert) dem orderBy-Filter nicht zur Verfügung stehen und Sie sowieso keine Daten in Ihren Schlüsseln speichern sollten
quelle
Hier ist was ich getan habe und es funktioniert.
Ich habe gerade ein String-Objekt verwendet.
<div ng-repeat="message in thread | orderBy : '-mostRecent.timeStamp'" >
Wenn ich nach Text sortieren wollte, würde ich tun
quelle
Ich werde meine aktualisierte Version des Filters hinzufügen, die die nächste Syntax unterstützt:
Vielen Dank an Armin und Jason für ihre Antworten in diesem Thread und an Alnitak in diesem Thread .
quelle
Armins Antwort + eine strenge Überprüfung auf Objekttypen und nicht eckige Schlüssel wie
$resolve
quelle
Das Folgende ermöglicht die Reihenfolge von Objekten nach Schlüssel ODER nach einem Schlüssel innerhalb eines Objekts .
In der Vorlage können Sie Folgendes tun:
Oder auch:
Der Filter:
quelle