2013-12-10 6 views
7

Ho un oggetto JSON. Non è ordinato in ordine crescente.Rimuovi ordine automatico da ng-repeat

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

Ho usato ng-repeat per mostrarlo nel mio template html. Ho ottenuto il risultato ma, l'ordine è cambiato in ordine crescente.

Forms 
Grids And Tables 
MAX 
Navigation 
Services & APIs 

Come evitare l'angolo js dall'ordinamento automatico?

Verifica questo link

+0

possibile duplicato della direttiva [ng-repeat ordina i dati quando si utilizza (chiave, valore)] (http://stackoverflow.com/questions/19676694/ng-repeat-directive-sort-the-data-when-using -key-value) – Stewie

risposta

2

L'ordine di iterazione sulle chiavi oggetto in JavaScript è tecnicamente definito. Mentre la maggior parte dei browser eseguirà l'iterazione sull'oggetto nell'ordine definito, non dovresti fare affidamento su questo comportamento.

Nel caso di angolare, ng-repeat deve ordinare sempre i tasti in modo che l'ordine sia deterministico anche quando le chiavi vengono aggiunte dopo il fatto. Non è possibile modificare questo comportamento perché interromperà la direttiva man mano che le chiavi vengono aggiunte o rimosse dinamicamente.

Se è necessario fare affidamento sull'ordinamento dei dati, un hash dell'oggetto non è la struttura dati corretta. Dovresti o riformattare i tuoi dati come una matrice, o semplicemente creare una matrice separata con l'ordine dei tasti e fare la tua ng-ripetizione su di essa. Usando le chiavi per indicizzare nell'oggetto.

9

Come suggerito, non è possibile ordinare le chiavi dell'oggetto. Comprare è possibile ordinare su un array creata usando queste chiavi oggetto -

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

Questo è ciò che intendevo nella mia risposta con voi per scorrere su un array separato e indicizzarvi. Non pensavo di usare Object.keys però. Questa è una buona idea. – dtabuenc

+0

Sì, una specie di stupido da parte mia per aver aggiunto una nuova risposta. Dovrebbe avere appena modificato la tua risposta. –

0

Devi dare un nome alle chiavi manualmente come 1,2,3,4,5 e poi sul front-end affettarli con string.slice (1). Spero che sia d'aiuto.