2013-12-10 9 views
7

私はjsonオブジェクトを持っています。昇順ではない。削除ng-repeatから自動注文

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

私はHTMLテンプレートでそれを表示するためにng-repeatを使用しました。私は結果を得たが、順序は昇順に変わった。

Forms 
Grids And Tables 
MAX 
Navigation 
Services & APIs 

どのように角度jsが自動発注から防ぐために?このlink

+0

[ng-repeatディレクティブの重複が可能(キー、値)を使用してデータをソート](http://stackoverflow.com/questions/19676694/ng-repeat-directive-sort-the-data-when-using) -key-value) – Stewie

答えて

2

チェックはJavaScriptでオブジェクトキーを反復処理の順序は、技術的に定義されていません。ほとんどのブラウザは定義された順序でオブジェクトを反復処理しますが、この動作に頼るべきではありません。

角度の場合、ng-repeatは、事後にキーが追加されても順序が決定的になるように常にキーをソートする必要があります。キーが動的に追加または削除されるとディレクティブが壊れるため、この動作を変更することはできません。

データの順序付けに頼る必要がある場合、オブジェクトハッシュは正しいデータ構造ではありません。データを配列として再フォーマットするか、またはキーの順序で別の配列を作成し、その上にng-repeatを実行する必要があります。キーを使用してオブジェクトにインデックスを付ける。

9

提案したように、オブジェクトキーを並べ替えることはできません。あなたは、配列は、それらのオブジェクトキーを使用して作成したオーバーソートすることができます購入 -

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

これは私があなたの答えで別の配列とインデックスを繰り返し処理することができたことを意味しています。私はObject.keysを使用するとは思わなかった。それはかなり良い考えです。 – dtabuenc

+0

うん、新しい答えを加えた私の愚かなもの。あなたの答えをちょうど編集したはずです。 –

0

手動1,2,3,4,5のようにあなたの鍵に名前を付ける必要があり、その後、フロントエンドにstring.sliceでそれらをスライス(1 )。それが役に立てば幸い。

関連する問題