Saya menggunakan arahan ng-repeat dengan filter seperti ini:
ng-repeat="item in items | orderBy:'order_prop' | filter:query | limitTo:4"
dan saya bisa melihat hasil yang diberikan baik-baik saja; sekarang saya ingin menjalankan beberapa logika pada hasil itu di controller saya. Pertanyaannya adalah bagaimana saya bisa mengambil referensi item hasil?
Memperbarui:
Hanya untuk mengklarifikasi: Saya mencoba membuat pelengkapan otomatis, saya mendapat masukan ini:
<input id="queryInput" ng-model="query" type="text" size="30" placeholder="Enter query">
dan kemudian hasil yang disaring:
<ul>
<li ng-repeat="item in items | orderBy:'order_prop' | filter:query | limitTo:4">{{item.name}}</li>
</ul>
sekarang saya ingin menavigasi hasilnya dan memilih salah satu item.
javascript
angularjs
filter
angularjs-ng-repeat
Shlomi Schwartz
sumber
sumber
filteredItems
saya selalu mendapatkan data satu filter nanti. Ini bukan hasil dari filter yang baru saja diubah, tetapi yang dari perubahan sebelumnya. Ada ide?Inilah versi filter dari solusi Andy Joslin.
Pembaruan: BREAKING CHANGE. Pada versi 1.3.0-beta.19 ( komitmen ini ) filter tidak memiliki konteks dan
this
akan terikat pada cakupan global. Anda bisa meneruskan konteks sebagai argumen atau menggunakan sintaks aliasing baru di ngRepeat , 1.3.0-beta.17 +.Kemudian menurut Anda
Yang memberi Anda akses ke
$scope.filteredItems
.sumber
$parse
adalah kompiler ekspresi Angular .. Sebagai contoh, ia akan mengambil string 'some.object.property' dan mengembalikan fungsi yang memungkinkan Anda untuk menetapkan atau mendapatkan nilai pada jalur tersebut untuk suatu yang ditentukan konteks. Saya menggunakannya untuk mengatur hasil filter pada $ scope di sini, khususnya. Saya harap ini menjawab pertanyaan Anda.Coba sesuatu seperti ini, masalah dengan ng-repeat adalah ia menciptakan lingkup anak karena itu Anda tidak dapat mengakses
dari controller
sumber
Memperbarui:
Bahkan setelah 1.3.0. jika Anda ingin meletakkannya di lingkup controller atau orang tua Anda tidak dapat melakukannya dengan sebagai sintaks. Sebagai contoh jika saya memiliki kode berikut:
di atas tidak akan berfungsi. Cara mengatasinya menggunakan $ parent sebagai berikut:
sumber
console.log labelResults
saya selalu mendapatkan data satu filter nanti. Ini bukan hasil dari filter yang baru saja diubah, tetapi yang dari perubahan sebelumnya. Apakah kamu tidak memiliki masalah ini?Saya datang dengan versi yang lebih baik dari solusi Andy. Dalam solusinya ng-repeat menempatkan arloji pada ekspresi yang berisi tugas. Setiap loop digest akan mengevaluasi ekspresi itu dan menetapkan hasilnya ke variabel lingkup.
Masalah dengan solusi ini adalah bahwa Anda mungkin mengalami masalah penugasan jika Anda berada dalam lingkup anak. Ini adalah alasan yang sama mengapa Anda harus memiliki titik dalam model ng .
Hal lain yang saya tidak suka tentang solusi ini adalah bahwa ia mengubur definisi array yang difilter di suatu tempat di tampilan markup. Jika digunakan di banyak tempat di tampilan Anda atau controller Anda, itu bisa membingungkan.
Solusi yang lebih sederhana adalah dengan hanya menempatkan jam di pengontrol Anda pada fungsi yang membuat tugas:
Fungsi ini akan dievaluasi selama setiap siklus cerna sehingga kinerja harus sebanding dengan solusi Andy. Anda juga dapat menambahkan sejumlah tugas dalam fungsi untuk menjaga semuanya di satu tempat daripada tersebar tentang tampilan.
Dalam tampilan, Anda hanya akan menggunakan daftar yang difilter secara langsung:
Inilah biola di mana ini ditampilkan dalam skenario yang lebih rumit.
sumber
Periksa jawaban ini:
Memilih dan mengakses item dalam ng-repeat
sumber