2013-12-10 6 views
7

Mam obiekt json. Nie jest uporządkowany w porządku rosnącym.Usuń Automatyczne zamawianie z ng-repeat

$scope.myData = { 
     "MAX" : "some value", 
     "Forms" : "some value", 
     "Grids And Tables" : "some value", 
     "Navigation" : "some value", 
     "Services & APIs" : "some value" 
    } 

Użyłem ng-repeat do pokazania go w moim szablonie html. Dostałem wynik, ale zamówienie zmieniło się w kolejności rosnącej.

Forms 
Grids And Tables 
MAX 
Navigation 
Services & APIs 

Jak zapobiec kątowym js z automatycznego zamawiania?

Sprawdź to link

+0

możliwy duplikat dyrektywy [ng-repeat sortuj dane przy użyciu (klucz, wartość)] (http://stackoverflow.com/questions/19676694/ng-repeat-directive-sort-the-data-when-using -key-value) – Stewie

Odpowiedz

2

Kolejność iteracji nad kluczami obiektów w JavaScript jest technicznie niezdefiniowane. Podczas gdy większość przeglądarek będzie iterować nad obiektem w określonej kolejności, nie powinieneś polegać na tym zachowaniu.

W przypadku kątowego, ng-repeat należy zawsze sortować klucze, aby porządek był deterministyczny nawet po dodaniu klawiszy po fakcie. Nie można zmienić tego zachowania, ponieważ złamałoby ono dyrektywę, ponieważ klucze są dodawane lub usuwane dynamicznie.

Jeśli musisz polegać na zamawianiu danych, wartość skrótu obiektu nie jest poprawną strukturą danych. Powinieneś ponownie sformatować swoje dane jako tablicę lub po prostu utworzyć oddzielną tablicę z kolejnością klawiszy i powtórzyć polecenie ng. Używanie klawiszy do indeksowania obiektu.

9

Zgodnie z sugestią, nie jest możliwe sortowanie kluczy obiektów. Kup można sortować nad tablicą tworzone przy użyciu tych obiektów klucze -

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

Oto, co miałem na myśli w mojej odpowiedzi, możesz iterować po oddzielnej tablicy i indeksować do niej. Nie myślałem o użyciu Object.keys. To całkiem niezły pomysł. – dtabuenc

+0

Yup, trochę głupio, że dodałem nową odpowiedź. Powinienem właśnie zredagować twoją odpowiedź. –

0

Trzeba wymienić klucze ręcznie jak 1,2,3,4,5 a następnie na przednim końcu część z nich z string.slice (1). Mam nadzieję, że to pomoże.