2013-12-10 3 views
7

Ich habe ein JSON-Objekt. Es ist nicht aufsteigend sortiert.Entfernen Automatische Bestellung von ng-repeat

Ich habe ng-repeat verwendet, um es in meiner HTML-Vorlage zu zeigen. Ich habe das Ergebnis erhalten, aber die Reihenfolge hat sich in aufsteigender Reihenfolge geändert.

Forms 
Grids And Tables 
MAX 
Navigation 
Services & APIs 

Wie verhindert man angular js von der automatischen Bestellung?

prüft diesen link

+0

möglich Duplikat der [ng-repeat-Anweisung sortiert die Daten bei Verwendung von (Schlüssel, Wert)] (http://stackoverflow.com/questions/19676694/ng-repeat-directive-sort-the-data-when-using) -key-value) – Stewie

Antwort

2

Der Auftrag über Objektschlüssel in Javascript Laufen ist technisch nicht definiert. Während die meisten Browser in der angegebenen Reihenfolge über das Objekt iterieren, sollten Sie sich nicht auf dieses Verhalten verlassen.

Im Fall von eckigen, muss ng-repeat immer die Schlüssel sortieren, so dass die Reihenfolge deterministisch ist, auch wenn Schlüssel nach der Tat hinzugefügt werden. Es ist nicht möglich, dieses Verhalten zu ändern, da es die Direktive beim Hinzufügen oder Entfernen von Schlüsseln unterbrechen würde.

Wenn Sie sich auf die Reihenfolge Ihrer Daten verlassen müssen, dann ist ein Objekthash nicht die richtige Datenstruktur. Sie sollten Ihre Daten entweder als Array neu formatieren oder einfach ein separates Array mit der Reihenfolge der Schlüssel erstellen und Ihre ng-Wiederholung darüber durchführen. Verwenden Sie die Tasten, um in das Objekt zu indizieren.

9

Wie vorgeschlagen, ist es nicht möglich, Objektschlüssel zu sortieren. Kaufen können Sie ein Array sortieren über erstellt, diese Objektschlüssel verwenden -

$scope.keys = Object.keys($scope.myData); 
<ul> 
    <li ng-repeat="key in keys"> 
    {{key}} - 
    {{myData[key]}} 
    </li> 
</ul> 
+0

Dies ist, was ich in meiner Antwort mit meinte, kann über ein separates Array iterieren und darin indizieren. Ich dachte jedoch nicht daran, Object.keys zu verwenden. Das ist eine ziemlich gute Idee. – dtabuenc

+0

Yup, irgendwie dumm von mir, eine neue Antwort hinzugefügt zu haben. Sollte gerade deine Antwort bearbeitet haben. –

0

Sie haben Ihre Schlüssel manuell wie 1,2,3,4,5 und dann auf Front-End nennen in Scheiben schneiden mit string.slice (1). Ich hoffe es hilft.