0

次のように ng-repeat を設定しています。

ng-repeat="article in main[main.mode].primary | orderBy: main[main.mode].primary.filter.order
track by article.url"

main[main.mode].primaryは配列で、…<code>.filter.order は文字列です。

このブログ記事によると

バックグラウンドで ngRepeat は各タスクに $$hashKey プロパティを追加して追跡します。元のタスクをサーバーからの新しいタスク オブジェクトに置き換えると、それらが実際には元のタスクと完全に同一であっても、それらは $$hashKey プロパティを持たないため、ngRepeat はそれらが同じ要素を表していることを認識しません。

リストの再生成は非常に一般的なタスクであり、アプリが 1 秒以上ハングしているため、追跡することに関心があります。私が見た多くの質問とドキュメントによると、配列の順序付けと追跡の両方に正しい構文を使用しました。ドキュメントから:

アイテム中のアイテム | filter:searchText track by item.id は、追跡式と組み合わせてアイテムにフィルターを適用するために使用できるパターンです。

トラックが実装されていないのはなぜですか?私はAngular 1.3.11を実行しています。

編集 orderBy 引数を削除しても機能しません

ng-repeat="article in main[main.mode].primary track by article.url"
4

1 に答える 1

1

Angular Documentation によると、 orderBy は配列でのみ機能するため、オブジェクトを反復処理している場合、オブジェクトを配列に変換しない限り、それを使用することはできません

https://docs.angularjs.org/api/ng/filter/orderBy

独自のフィルターを実装するか、オブジェクトをキー値プロパティを持つオブジェクトの配列に変換するだけで、これを処理できる他の方法があります。何かのようなもの

var narr=[]
angular.forEach(object,function(k,v){
  narr.push({key:v,value:v})
})

これで、narr は orderBy を使用してキーまたは値でソートできる配列になりました

于 2015-01-29T23:48:08.660 に答える