Bagaimana saya bisa mendapatkan array terbalik di sudut? Saya mencoba menggunakan filter orderBy, tetapi perlu predikat (misalnya 'nama') untuk mengurutkan:
<tr ng-repeat="friend in friends | orderBy:'name':true">
<td>{{friend.name}}</td>
<td>{{friend.phone}}</td>
<td>{{friend.age}}</td>
<tr>
Apakah ada cara untuk membalikkan array asli, tanpa menyortir. seperti itu:
<tr ng-repeat="friend in friends | orderBy:'':true">
<td>{{friend.name}}</td>
<td>{{friend.phone}}</td>
<td>{{friend.age}}</td>
<tr>
ng-repeat
perilaku! @ Senior Senior melakukan pekerjaan dengan baik.Jawaban:
Saya sarankan menggunakan filter khusus seperti ini:
Yang kemudian bisa digunakan seperti:
Lihat berfungsi di sini: Demonstrasi Plunker
Filter ini dapat disesuaikan agar sesuai dengan kebutuhan Anda sesuai keinginan. Saya telah memberikan contoh lain dalam demonstrasi. Beberapa opsi termasuk memeriksa bahwa variabel adalah array sebelum melakukan kebalikan, atau membuatnya lebih lunak untuk memungkinkan pembalikan lebih banyak hal seperti string.
sumber
items.reverse()
memodifikasi array bukan hanya membuat yang baru dan mengembalikannya.slice()
untuk memecahkan masalah itu.if (!angular.isArray(items)) return false;
untuk memverifikasi bahwa Anda memiliki array sebelum mencoba membalikkannya.Inilah yang saya gunakan:
Memperbarui:
Jawaban saya OK untuk versi lama Angular. Sekarang, Anda harus menggunakan
ng-repeat="friend in friends | orderBy:'-'"
atau
dari https://stackoverflow.com/a/26635708/1782470
sumber
track by
, ini satu-satunya cara yang bekerja untuk sayang-repeat="friend in friends | orderBy:'+': true track by $index"
Maaf sudah membahas ini setelah satu tahun, tetapi ada solusi baru yang lebih mudah , yang berfungsi untuk Angular v1.3.0-rc.5 dan yang lebih baru .
Disebutkan dalam dokumen : "Jika tidak ada properti yang disediakan, (misalnya '+') maka elemen array itu sendiri digunakan untuk membandingkan tempat penyortiran". Jadi, solusinya adalah:
ng-repeat="friend in friends | orderBy:'-'"
ataung-repeat="friend in friends | orderBy:'+':true"
Solusi ini tampaknya lebih baik karena tidak mengubah array dan tidak memerlukan sumber daya komputasi tambahan (setidaknya dalam kode kami). Saya sudah membaca semua jawaban yang ada dan masih lebih suka yang ini.
sumber
v1.3.0-rc.4
). Jika ada yang mendapat kesempatan untuk mencobanya di rilis baru, beri tahu kami!v1.3.0-rc.5
( rc.5 docs vs rc.4 docs ). Saya telah memperbarui jawabannyaorderBy:'+':true
,orderBy:'-':true
,orderBy:'-':false
,orderBy:'+':false
:(Anda dapat membalikkan dengan parameter $ index
sumber
$index
). Saya di Angular 1.1.5.ng-repeat="friend in friends | orderBy:'id':true"
bekerja.Solusi sederhana: - (tidak perlu membuat metode apa pun)
sumber
Anda bisa memanggil metode pada lingkup Anda untuk membalikkannya untuk Anda, seperti ini:
Perhatikan bahwa
$scope.reverse
menciptakan salinan array karenaArray.prototype.reverse
memodifikasi array asli.sumber
jika Anda menggunakan 1.3.x, Anda dapat menggunakan yang berikut ini
Contoh Daftar buku berdasarkan tanggal penerbitan dalam urutan menurun
sumber: https://docs.angularjs.org/api/ng/filter/orderBy
sumber
Jika Anda menggunakan angularjs versi 1.4.4 dan lebih tinggi , cara mudah untuk mengurutkan adalah dengan menggunakan " $ index ".
lihat demo
sumber
Saat menggunakan MVC di .NET dengan Angular Anda selalu dapat menggunakan OrderByDecending () saat melakukan permintaan db Anda seperti ini:
Kemudian di sisi Angular, itu sudah akan terbalik di beberapa browser (IE). Saat mendukung Chrome dan FF, Anda kemudian perlu menambahkan orderBy:
Dalam contoh ini, Anda akan mengurutkan dalam urutan menurun pada properti .Id. Jika Anda menggunakan paging, ini menjadi lebih rumit karena hanya halaman pertama yang akan diurutkan. Anda harus menangani ini melalui file filter .js untuk controller Anda, atau dengan cara lain.
sumber
Anda juga dapat menggunakan .reverse (). Ini adalah fungsi array asli
<div ng-repeat="friend in friends.reverse()">{{friend.name}}</div>
sumber
reverse
membalikkan array di tempatnya, itu tidak hanya mengembalikan salinan yang terbalik. Ini berarti bahwa setiap kali ini dievaluasi, array akan dibalik.Itu karena Anda menggunakan objek JSON. Ketika Anda menghadapi masalah seperti itu maka ubah Objek JSON Anda menjadi Objek Array JSON.
Sebagai contoh,
sumber
The
orderBy
Filter melakukan stabil menyortir pada sudut 1.4.5. (Lihat permintaan tarik GitHub https://github.com/angular/angular.js/pull/12408 .)Jadi cukup menggunakan predikat konstan dan
reverse
diatur ketrue
:sumber
Saya menemukan sesuatu seperti ini, tetapi bukannya array saya menggunakan objek.
Ini solusi saya untuk objek:
Tambahkan filter khusus:
Yang kemudian bisa digunakan seperti
Jika Anda memerlukan dukungan browser lama, Anda harus mendefinisikan fungsi pengurangan (ini hanya tersedia di ECMA-262 mozilla.org )
sumber
Saya merasa frustrasi dengan masalah ini sendiri dan saya memodifikasi filter yang dibuat oleh @Trevor Senior ketika saya mengalami masalah dengan konsol saya mengatakan bahwa itu tidak dapat menggunakan metode sebaliknya. Saya juga ingin menjaga integritas objek karena inilah yang awalnya digunakan Angular dalam arahan ng-repeat. Dalam hal ini saya menggunakan input bodoh (kunci) karena konsol akan kesal mengatakan ada duplikat dan dalam kasus saya, saya perlu melacak dengan $ indeks.
Saring:
HTML:
<div ng-repeat="items in items track by $index | reverse: items">
sumber
Saya menambahkan satu jawaban yang tidak ada yang disebutkan. Saya akan mencoba membuat server melakukannya jika Anda memilikinya. Pemfilteran klien dapat berbahaya jika server mengembalikan banyak catatan. Karena Anda mungkin terpaksa menambahkan paging. Jika Anda memiliki paging dari server maka filter klien pada urutan, akan berada di halaman saat ini. Yang akan membingungkan pengguna akhir. Jadi jika Anda memiliki server, maka kirim orderby dengan panggilan dan biarkan server mengembalikannya.
sumber
Tip yang berguna:
Anda dapat membalikkan array dengan vanilla Js: yourarray .reverse ()
Perhatian: reverse adalah destruktif, sehingga akan mengubah array Anda, bukan hanya variabel.
sumber
Saya akan menyarankan menggunakan metode reverse native array selalu pilihan yang lebih baik daripada membuat filter atau menggunakan
$index
.Plnkr_demo .
sumber