Saya memiliki array data yang berisi banyak objek (format JSON). Berikut ini dapat diasumsikan sebagai isi dari array ini:
var data = [
{
"name": "Jim",
"age" : 25
},
{
"name": "Jerry",
"age": 27
}
];
Sekarang, saya menampilkan detail ini sebagai:
<div ng-repeat="person in data | filter: query">
</div
Di sini, kueri dimodelkan ke bidang input di mana pengguna dapat membatasi data yang ditampilkan.
Sekarang, saya memiliki lokasi lain di mana saya menampilkan jumlah orang / orang yang sedang ditampilkan, yaitu Showing {{data.length}} Persons
Yang ingin saya lakukan adalah bahwa ketika pengguna mencari seseorang dan data yang ditampilkan difilter berdasarkan permintaan, maka Showing...persons
juga mengubah nilai orang yang ditampilkan saat ini. Tetapi itu tidak terjadi. Itu selalu menampilkan total orang dalam data daripada yang difilter - bagaimana cara saya mendapatkan jumlah data yang difilter?
sumber
$scope.filtered.length
.undefined
, kemungkinan karena pada saat logging, variabel belum didefinisikan. Jadi bagaimana saya memastikan kode di controller dijalankan setelah variabel didefinisikan dan filter diterapkan dalam tampilan?$scope.$watch('filtered', function() { console.log('filtered:', $scope.filtered); });
person in data | filter:query as filtered | limitTo:5
. Jadi saya harus menggunakan versi sebelum 1.3:person in filtered = (data | filter: query) | limitTo: 5
Untuk kelengkapan, selain jawaban sebelumnya (melakukan perhitungan orang-orang yang terlihat di dalam controller) Anda juga dapat melakukan perhitungan itu dalam template HTML Anda seperti pada contoh di bawah ini.
Dengan asumsi daftar orang Anda dalam
data
variabel dan Anda memfilter orang menggunakanquery
model, kode berikut akan bekerja untuk Anda:{{data.length}}
- mencetak jumlah orang{{(data|filter:query).length}}
- mencetak jumlah orang yang difilterPerhatikan bahwa solusi ini berfungsi dengan baik jika Anda ingin menggunakan data yang difilter hanya sekali dalam satu halaman. Namun, jika Anda menggunakan data yang difilter lebih dari sekali misalnya untuk menyajikan item dan menunjukkan panjang daftar yang difilter, saya akan menyarankan menggunakan alias alias (dijelaskan di bawah) untuk AngularJS 1.3+ atau solusi yang diajukan oleh @Wumms untuk versi AngularJS sebelum 1.3.
Fitur Baru dalam Angular 1.3
Pembuat AngularJS juga memperhatikan masalah itu dan dalam versi 1.3 (beta 17) mereka menambahkan ekspresi "alias" yang akan menyimpan hasil antara pengulang setelah filter diterapkan misalnya
The ekspresi alias akan mencegah masalah eksekusi penyaring beberapa.
Saya harap itu akan membantu.
sumber
{{(data|filter:query|filter:query2).length}}
Cara termudah jika Anda miliki
Panjang data yang difilter
sumber
ngRepeat membuat salinan array ketika menerapkan filter, jadi Anda tidak bisa menggunakan array sumber untuk referensi hanya elemen yang difilter.
Dalam kasus Anda, mungkin lebih baik menerapkan filter di dalam pengontrol Anda menggunakan
$filter
layanan:Dan kemudian Anda menggunakan
filteredData
properti dalam tampilan Anda. Berikut adalah Plunker yang berfungsi: http://plnkr.co/edit/7c1l24rPkuKPOS5o2qtx?p=previewsumber
{{filteredData.length}}
alih-alihdata.length
. Saya juga mengerti bahwamyInputModel
model dipetakan ke permintaan input yang menyaring data.val
akan menjadi teks yang diketik dalam input (pada dasarnya permintaan) tetapi setiap kali saya mengetik, itu berubah. Tapi apa yang ada difilterFilter
sini? Saya dapat menambahkan bahwa saya memiliki customFilter saya sendiri dibuat (di mana saya dapat menentukan kunci objek yang akan dipertimbangkan untuk pemfilteran).ng-repeat="person in filteredData"
karena tidak ada gunanya menyaringnya dua kali. Dengan$filter
layanan, Anda dapat meminta untuk filter tertentu dengan hanya suffixing dengan "Filter", misalnya:dateFilter
,jsonFilter
, dll Jika Anda menggunakan filter kustom Anda sendiri, hanya menggunakan satu bukan generikfilterFilter
.Sejak AngularJS 1.3 Anda dapat menggunakan alias:
dan di suatu tempat:
Dari dokumen :
sumber
$scope.$watch
hasil alias ini. Adakah tips untuk$broadcast
memasukkanresults
variabel alias ?Penting juga untuk dicatat bahwa Anda dapat menyimpan beberapa tingkat hasil dengan mengelompokkan filter
inilah demo biola
sumber
Di sini bekerja contoh Lihat di Plunker
sumber
Anda dapat melakukannya dengan 2 cara . Di template dan di Controller . Dalam template Anda dapat mengatur array yang difilter ke variabel lain, lalu menggunakannya seperti yang Anda inginkan. Inilah cara melakukannya:
Jika Anda membutuhkan contoh, lihat AngularJs menghitung contoh / demo
sumber