Saya tidak dapat menerjemahkan kode ini dari Angualr 1 ke Angular 2:
ng-repeat="todo in todos | orderBy: 'completed'"
Inilah yang telah saya lakukan mengikuti jawaban Thierry Templier:
Template komponen:
*ngFor="#todo of todos | sort"
Kode komponen:
@Component({
selector: 'my-app',
templateUrl: "./app/todo-list.component.html",
providers: [TodoService],
pipes: [ TodosSortPipe ]
})
Kode pipa:
import { Pipe } from "angular2/core";
import {Todo} from './todo';
@Pipe({
name: "sort"
})
export class TodosSortPipe {
transform(array: Array<Todo>, args: string): Array<Todo> {
array.sort((a: any, b: any) => {
if (a < b) {
return -1;
} else if (a > b) {
return 1;
} else {
return 0;
}
});
return array;
}
}
Saya mencoba mengurutkan larik Todo
s, yang diurutkan berdasarkan properti completed
. Pertama todo.completed = false
dan kemudian todo.complete = true
.
Saya tidak mengerti betul transform
metode dan bagaimana menyampaikan argumen dalam metode itu dan dalam sort
metode.
Apa args: string
argumennya? Apa a
dan b
dan di mana mereka berasal?
angular
angular2-template
angular-pipe
Alexander Abakumov
sumber
sumber
Jawaban:
Saya memodifikasi respons @Thierry Templier sehingga pipa dapat mengurutkan objek khusus dalam sudut 4:
Dan untuk menggunakannya:
Semoga ini membantu seseorang.
sumber
The pipe 'sort' could not be found
. Dapatkah saya menyuntikkan pipa ke komponen saya seperti di pipa 2 sudut: [ArraySortPipe]?Silakan lihat https://angular.io/guide/pipes#appendix-no-filterpipe-or-orderbypipe untuk diskusi lengkapnya. Kutipan ini paling relevan. Pada dasarnya, untuk aplikasi skala besar yang harus diminimalkan secara agresif, logika pemfilteran dan pengurutan harus berpindah ke komponen itu sendiri.
sumber
filteredHeroes
dansortedHeroes
, menurut saya idenya adalah bahwa saat menginisialisasi komponen Anda akan menjalankan beberapa logika penyortiran / pemfilteran (mungkin memanggil metode dari ngOnInit), lalu menyetel properti itu dengan hasil yang diurutkan / difilter, dan hanya menjalankan ulang logika / memperbarui properti jika ada sesuatu yang memicu kebutuhan (misalnya, interaksi pengguna memicu panggilan AJAX untuk mendapatkan lebih banyak pahlawan, atau pengguna mengklik kotak centang untuk memfilter setengah dari mereka berdasarkan beberapa kriteria, dll.)Anda bisa menerapkan pipa khusus untuk ini yang memanfaatkan
sort
metode array:Dan gunakan pipa ini seperti yang dijelaskan di bawah ini. Jangan lupa untuk menentukan pipa Anda ke dalam
pipes
atribut komponen:Ini adalah contoh sederhana untuk array dengan nilai string tetapi Anda dapat memiliki beberapa pemrosesan pengurutan lanjutan (berdasarkan atribut objek dalam kasus array objek, berdasarkan parameter pengurutan, ...).
Berikut adalah plunkr untuk ini: https://plnkr.co/edit/WbzqDDOqN1oAhvqMkQRQ?p=preview .
Semoga bisa membantu Anda, Thierry
sumber
sort
metode tersebut adalah metodeArray
objek JavaScript . Lihat tautan ini: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… .pipes: [..]
deklarasi tidak berlaku lagi (dan tidak lagi diperlukan)OrderByPipe yang diperbarui: diperbaiki bukan menyortir string.
buat kelas OrderByPipe:
di pengontrol Anda:
atau di
di html Anda:
sumber
Angular tidak datang dengan filter orderBy di luar kotak, tetapi jika kita memutuskan kita membutuhkannya, kita dapat dengan mudah membuatnya. Namun ada beberapa peringatan yang perlu kita waspadai terkait dengan kecepatan dan minifikasi. Lihat di bawah.
Pipa sederhana akan terlihat seperti ini.
Pipa ini menerima fungsi sortir (
fn
), dan memberinya nilai default yang akan mengurutkan array primitif dengan cara yang masuk akal. Kami memiliki opsi untuk mengganti fungsi sortir ini jika diinginkan.Itu tidak menerima nama atribut sebagai string, karena nama atribut tunduk pada minifikasi. Mereka akan berubah ketika kita mengecilkan kode kita, tetapi penambang tidak cukup pintar untuk juga mengecilkan nilai dalam string template.
Menyortir primitif (angka dan string)
Kita bisa menggunakan ini untuk mengurutkan array angka atau string menggunakan pembanding default:
Menyortir larik objek
Jika kita ingin mengurutkan sebuah array objek, kita bisa memberinya fungsi komparator.
Peringatan - pipa murni vs. tidak murni
Angular 2 memiliki konsep pipa murni dan tidak murni.
Pipa murni mengoptimalkan deteksi perubahan menggunakan identitas objek. Artinya pipa hanya akan berjalan jika objek input berubah identitas, misalnya jika kita menambahkan item baru ke dalam array. Itu tidak akan turun ke objek. Ini berarti jika kita mengubah atribut bersarang:
this.cats[2].name = "Fluffy"
misalnya, pipa tidak akan dijalankan ulang. Ini membantu Angular menjadi cepat. Pipa sudut murni secara default.Pipa yang tidak murni di sisi lain akan memeriksa atribut objek. Ini berpotensi membuatnya lebih lambat. Karena tidak dapat menjamin apa yang akan dilakukan fungsi pipa (mungkin diurutkan berbeda berdasarkan waktu, misalnya), pipa yang tidak murni akan berjalan setiap kali terjadi peristiwa asinkron.Ini akan sangat memperlambat aplikasi Anda jika arraynya besar.
Pipa di atas murni. Artinya, ini hanya akan berjalan jika objek dalam larik tidak dapat diubah. Jika Anda berganti kucing, Anda harus mengganti seluruh objek kucing dengan yang baru.
Kita dapat mengubah di atas menjadi pipa tidak murni dengan mengatur atribut murni:
Pipa ini akan turun menjadi objek, tetapi akan lebih lambat. Gunakan dengan hati-hati.
sumber
Saya telah membuat pipa OrderBy yang melakukan apa yang Anda butuhkan. Ini mendukung kemampuan untuk mengurutkan pada banyak kolom dari objek yang tak terhitung banyaknya juga.
Pipa ini memungkinkan untuk menambahkan lebih banyak item ke larik setelah merender laman, dan akan mengurutkan larik dengan pembaruan secara dinamis.
Saya telah menulis tentang prosesnya di sini .
Dan inilah demo yang berfungsi: http://fuelinteractive.github.io/fuel-ui/#/pipe/orderby dan https://plnkr.co/edit/DHLVc0?p=info
sumber
Sarankan Anda menggunakan lodash dengan sudut, maka pipa Anda akan menjadi yang berikutnya:
dan menggunakannya di html seperti
dan jangan lupa tambahkan Pipa ke modul Anda
sumber
Ini akan bekerja untuk bidang apa pun yang Anda berikan padanya. ( PENTING: Ini hanya akan mengurutkan menurut abjad jadi jika Anda melewati tanggal itu akan mengurutkan sebagai alfabet bukan sebagai tanggal)
sumber
@Component
tidak memilikipipes
properti.Ini adalah pengganti yang baik untuk pipa orderby AngularJs di sudut 4 . Mudah dan sederhana untuk digunakan.
Ini adalah URL github untuk informasi lebih lanjut https://github.com/VadimDez/ngx-order-pipe
sumber
Seperti yang kita ketahui filter dan urutan oleh dihapus dari ANGULAR 2 dan kita perlu menulis sendiri, berikut adalah contoh yang baik tentang plunker dan artikel terperinci
Ini digunakan baik filter maupun orderby, berikut adalah kode untuk pipa pesanan
sumber
Anda dapat menggunakan ini untuk objek:
sumber
Di package.json, tambahkan sesuatu seperti (Versi ini ok untuk Angular 2):
Dalam modul skrip Anda (dan impor array):
sumber
sumber
Dalam versi Angular2 saat ini, pipa orderBy dan ArraySort tidak didukung. Anda perlu menulis / menggunakan beberapa pipa khusus untuk ini.
sumber
Untuk Angular 5+ Version kita bisa menggunakan paket ngx-order-pipe
Tautan Tutorial Sumber
Instal paket
Impor dalam modul aplikasi
gunakan dimana saja
sumber
orderby Pipe di Angular JS akan mendukung tetapi Angular (versi yang lebih tinggi) tidak akan mendukung . Temukan detailnya yang dibahas untuk meningkatkan kecepatan kinerja yang sudah usang.
https://angular.io/guide/pipes#appendix-no-filterpipe-or-orderbypipe
sumber
sumber