Saya memiliki serangkaian produk yang saya ulangi menggunakan ng-repeat dan saya menggunakan
<div ng-repeat="product in products | filter:by_colour">
untuk menyaring produk ini berdasarkan warna. Filter berfungsi tetapi jika nama produk / deskripsi dll mengandung warna maka produk tetap setelah filter diterapkan.
Bagaimana cara mengatur filter agar hanya berlaku untuk bidang warna array saya daripada setiap bidang?
angularjs
ng-repeat
angularjs-filter
Tim Webster
sumber
sumber
Jawaban:
Lihat contoh di halaman filter . Gunakan objek, dan atur warna di properti warna:
sumber
filter:{ color: '...', size: '...', ...}
Tentukan properti (yaitu
colour
) tempat Anda ingin filter diterapkan:sumber
'!'+
, seperti ini<div ng-repeat="product in products | filter:{ colour: '!'+by_colour }">
<div ng-repeat="product in products | filter:{ resultsMap.annie: '!!' }">
atau (sesuatu yang setara) seperti ini:<div ng-repeat="product in products | filter:by">
dan pada controller:$scope.by = { 'resultsMap.annie': '!!' };
. Pendekatan kedua ini memberi Anda lebih banyak kontrol atas properti yang sedang difilter. Catatan:'!!'
berarti "bukan nol".customFilter
dapat berupa objek sederhana discope
mana Anda memperbarui kapan pun diperlukan. Periksa plunker ini .Anda bisa memfilter berdasarkan objek dengan properti yang cocok dengan objek yang harus Anda filter di atasnya:
Ini tentu saja dapat diteruskan oleh variabel, seperti yang disarankan Mark Rajcok.
sumber
Jika Anda ingin memfilter pada cucu (atau lebih dalam) dari objek yang diberikan, Anda dapat terus membangun hierarki objek Anda. Misalnya, jika Anda ingin memfilter pada 'thing.properties.title', Anda dapat melakukan hal berikut:
Anda juga dapat memfilter beberapa properti objek hanya dengan menambahkannya ke objek filter Anda:
sumber
Cara terbaik untuk melakukan ini adalah dengan menggunakan fungsi:
html
javascript
Atau, Anda dapat menggunakan ngHide atau ngShow untuk menampilkan dan menyembunyikan elemen secara dinamis berdasarkan kriteria tertentu.
sumber
Hati-hati dengan filter sudut. Jika Anda ingin memilih nilai tertentu di bidang, Anda tidak dapat menggunakan filter.
Contoh:
javascript
html
Ini akan memilih keduanya, karena menggunakan sesuatu seperti
substr
Itu berarti Anda ingin memilih produk di mana "warna" berisi string "biru" dan bukan di mana "warna" adalah "biru".
sumber
<div ng-repeat="product in products | filter: { color: 'blue' }:true">
hanya akan bekerja pada pencocokan tepat (yang 'benar' di akhir adalah argumen pembanding: tautanCari berdasarkan warna:
Anda dapat melakukan sarang batin juga.
sumber
Jika Anda melakukan hal berikut:
... Anda tidak hanya akan mendapatkan item dari itemTypeId 2 dan itemStatus 1, tetapi Anda juga akan mendapatkan item dengan itemType 20, 22, 202, 123 dan itemStatus 10, 11, 101, 123. Ini karena filter: {.. .} sintaks berfungsi seperti string berisi kueri.
Namun, jika Anda menambahkan : kondisi benar , itu akan melakukan filter dengan pencocokan tepat:
sumber
cara saya adalah ini
Menampilkan seperti ini
sumber
Anda harus menggunakan
filter:{color_name:by_colour}
sebagai gantinyaJika Anda ingin mencocokkan dengan satu properti dari suatu objek, maka tulis properti itu alih-alih objek, jika tidak, beberapa properti lainnya akan cocok.
sumber
Tentukan properti dalam filter, dari objek yang ingin Anda terapkan filter:
Tetapi Anda ingin menerapkan filter hanya pada nama depan
sumber
Jika Anda ingin memfilter untuk satu bidang:
Jika Anda ingin memfilter untuk semua bidang:
dan https://docs.angularjs.org/api/ng/filter/filter bagus untuk Anda
sumber