web-dev-qa-db-ja.com

ng-repeatの逆リスト

だから私は私がレンダリングするためにng-repeatを使用している配列を持っていますが、このリストを逆にしたいと思います。以前、私はこの回答から得たフィルターを使用しました: 逆の角度ng-repeat

しかし、今度は「TypeError:Object#has no method 'slice」at Scope」というエラーが発生します。これが新しいバージョンのAngularJSのせいなのか、何か不足しているのかわかりません。

これは私のフィルターコードです:

.filter('reverse', function () {
return function(items) {
    return items.slice().reverse();
};

これは、div内からの私のビューのコードです。

data-ng-repeat='feed in feeds | reverse'
11
ph3bell

配列を逆にレンダリングし、「id」で順序付けするには、これでうまくいくはずです。

data-ng-repeat="feed in feeds | orderBy:'id':true"

それで問題が解決するかどうかお知らせください。

参考までに: http://jsfiddle.net/byizzy/pgPVU/3/

18
goofie

これは少しトリッキーですが、新しい述語関数を作成したり、配列を変更したりせずに配列を逆にしたいすべての人にとって...

ng-repeat="feed in feeds | orderBy:'':true"

または

ng-repeat="feed in feeds | orderBy:'-'"

[〜#〜]説明[〜#〜]
2番目のパラメーターを空白の文字列のままにすると、Angularは配列(インデックス)のデフォルトの順序でソートされ、最後にtrueを追加しますAngularのreverseパラメータを有効にする 'orderBy

12
Shay Elkayam

次のように、逆のJavaスクリプトスライス関数を直接使用してください。

data-ng-repeat="item in items.slice().reverse()"
4
Manoj Patidar

単一のフィードの構造は何ですか? angularの組み込みフィルターを使用して、希望どおりに並べ替えることができます。たとえば、フィールド「id」が配列内の「order」を提供するものである場合、これを行う:

data-ng-repeat='feed in feeds | orderBy:id' 

これを逆にしたい場合は、次のようにします。

data-ng-repeat='feed in feeds | orderBy:id:reverse'

それは理にかなっていますか?独自のフィルターが必要かどうかわからない。その場合は、デバッグ(つまり、コンソールへの書き込みなど)を試して、実際に何が渡されているかを確認してください。それが配列ではない場合、それはあなたの問題です、そうでなければ代わりにこれを試してください:

return Array.prototype.slice.call(items).reverse(); 

それらのいずれかがあなたのために働くかどうか教えてください!

3
Jeremy Likness

これがあなたの問題を解決することを願っています

data-ng-repeat='feed in feeds.reverse()'
1

配列をソートせず、コピーと反転のみを行うソリューション:ng-repeat="item in items | orderBy : '[]': true"

0
ChenR