Lihat contohnya di sini: http://docs.angularjs.org/api/ng.filter:filter
Anda dapat mencari berdasarkan salah satu properti telepon dengan menggunakan <input ng-model="search">
dan Anda dapat mencari hanya dengan nama dengan menggunakan <input ng-model="search.name">
, dan hasilnya disaring dengan tepat berdasarkan nama (mengetik nomor telepon tidak memberikan hasil apa pun, seperti yang diharapkan).
Katakanlah saya memiliki model dengan "nama" properti, "telepon" properti, dan "rahasia" properti, bagaimana aku pergi tentang penyaringan oleh kedua "nama" dan "telepon" properti dan tidak "rahasia" properti ? Jadi pada dasarnya, pengguna dapat mengetik nama atau nomor telepon dan ng-repeat
akan memfilter dengan benar, tetapi meskipun pengguna mengetikkan nilai yang sama dengan bagian dari nilai "rahasia", itu tidak akan mengembalikan apa pun.
Terima kasih.
ng-model
(ditentukansearch.name
di bidang INPUTng-model
) akan mengakibatkan objek diulang disaring olehname
propertinya? Yaitu secara intuitif bagi saya, Anda harus dapat secara khusus memfilter hanyaname
dengan menentukan dalamng-repeat
filter Andafilter: friend.name
:, daripada `menulis` <input ng-model = "search.name"> ...Jawaban:
Ini plunkernya
Plunker baru dengan kode yang lebih bersih & di mana kueri dan item daftar pencarian tidak membedakan huruf besar / kecil
Ide utamanya adalah membuat fungsi filter untuk mencapai tujuan ini.
Dari dokumen resmi
Memperbarui
Beberapa orang mungkin memiliki perhatian pada kinerja di dunia nyata, dan itu benar.
Di dunia nyata, kita mungkin akan melakukan filter semacam ini dari pengontrol.
Berikut adalah detail posting yang menunjukkan bagaimana melakukannya.
singkatnya, kami menambahkan
ng-change
masukan untuk memantau perubahan pencarian barudan kemudian memicu fungsi filter.
sumber
item.brand.indexOf($scope.query)!=-1 || item.model.indexOf($scope.query)!=-1)
Anda bisa meneruskan Objek sebagai parameter ke ekspresi filter Anda, seperti yang dijelaskan dalam Referensi API . Objek ini dapat secara selektif menerapkan properti yang Anda minati, seperti:
Ini Plunker
Perhatian ... contoh ini berfungsi baik dengan AngularJS 1.1.5, tetapi tidak selalu baik di 1.0.7. Dalam contoh ini 1.0.7 akan menginisialisasi dengan semua yang difilter, kemudian bekerja saat Anda mulai menggunakan masukan. Ini berperilaku seperti input memiliki nilai yang tidak cocok di dalamnya, meskipun awalnya kosong. Jika Anda ingin tetap menggunakan rilis stabil, lanjutkan dan coba ini untuk situasi Anda, tetapi beberapa skenario mungkin ingin menggunakan solusi @ maxisam hingga 1.2.0 dirilis.
sumber
Saya menginspirasi diri saya sendiri dari jawaban @ maxisam dan membuat fungsi sortir saya sendiri dan saya pikir saya akan membagikannya (karena saya bosan).
Situasi Saya ingin memfilter melalui berbagai mobil. Properti yang dipilih untuk difilter adalah nama, tahun, harga dan km. Harga properti dan km adalah angka (karena itu digunakan
.toString
). Saya juga ingin mengontrol huruf besar (karenanya.toLowerCase
). Juga saya ingin dapat membagi permintaan filter saya menjadi kata-kata yang berbeda (mis. Diberi filter Acura 2006, ia menemukan kecocokan 2006 dengan tahun dan Acura dengan nama).Fungsi saya lolos ke filter
sumber
Jika Anda terbuka untuk menggunakan pustaka pihak ketiga, 'Filter Angular' dengan koleksi filter yang bagus mungkin berguna:
https://github.com/a8m/angular-filter#filterby
sumber
Semoga jawaban ini bisa membantu, Filter Nilai Ganda
Dan contoh kerja di biola ini
sumber
Ada banyak solusi bagus di sini tetapi saya sarankan untuk pergi ke rute lain dengan ini. Jika pencarian adalah hal terpenting dan properti 'rahasia' sama sekali tidak digunakan pada tampilan; pendekatan saya untuk ini adalah dengan menggunakan filter bersudut built-in dengan semua manfaatnya dan hanya memetakan model ke array objek baru.
Contoh dari pertanyaan:
Sekarang, di html cukup gunakan filter biasa untuk mencari kedua properti ini.
sumber
Pendekatan cukup lurus ke depan menggunakan filterBy di angularJs
Untuk bekerja, silakan ikuti tautan ini
http://plnkr.co/edit/US6xE4h0gD5CEYV0aMDf?p=preview
Ini secara khusus menggunakan satu properti untuk mencari di beberapa kolom tetapi tidak semua.
pengontrol
sumber
Saya menyelesaikan ini dengan sederhana:
sumber
http://plnkr.co/edit/A2IG03FLYnEYMpZ5RxEm?p=preview
Berikut adalah pencarian case sensitive yang juga memisahkan pencarian Anda menjadi kata-kata untuk dicari di setiap model juga. Hanya ketika menemukan spasi, ia akan mencoba membagi kueri menjadi array dan kemudian mencari setiap kata.
Ini mengembalikan nilai true jika setiap kata setidaknya di salah satu model.
sumber
Filter dapat berupa objek JavaScript dengan bidang dan Anda dapat memiliki ekspresi sebagai:
sumber
Saya ingin tetap sederhana jika memungkinkan. Saya perlu mengelompokkan menurut Internasional, memfilter semua kolom, menampilkan hitungan untuk setiap grup dan menyembunyikan grup jika tidak ada item.
Ditambah saya tidak ingin menambahkan filter kustom hanya untuk sesuatu yang sederhana seperti ini.
sumber
Saya mungkin akan sangat terlambat tetapi inilah yang akhirnya saya lakukan. Saya membuat filter yang sangat umum.
Kemudian gunakan seperti ini
Kotak pencarian Anda akan seperti
di mana nama dan device_id adalah properti di dvs
sumber
Berikut solusi sederhana bagi mereka yang menginginkan filter cepat terhadap suatu objek:
Filter array memungkinkan Anda meniru objek yang Anda coba filter. Dalam kasus di atas, kelas-kelas berikut akan berfungsi dengan baik:
Dan di mana dek akan terlihat seperti:
Dan jika Anda ingin memfilter beberapa properti objek cukup pisahkan nama bidang dengan koma:
EDIT: Berikut adalah plnkr yang berfungsi yang memberikan contoh filter properti tunggal dan ganda:
http://embed.plnkr.co/i0wCx6l1WPYljk57SXzV/
sumber
ng-repeat
. Namun, contoh Anda tampaknya agak rumit: adakah cara untuk meringkasnya? Saya tahu pertanyaannya pada dasarnya adalah mencari satu bidang pencarian yang dapat memfilter properti yang dipilih saja. Dalam contoh Anda, sepertinya kami memfilter nama atau angka nilai nominal, tetapi tidak keduanya. Jika saya salah memahami contoh Anda, beri tahu saya!