Saya memiliki masukan yang memfilter daftar ng-pengulangan pada perubahan. Pengulangan berisi banyak data dan membutuhkan beberapa detik untuk menyaring semuanya. Saya ingin penundaan mereka menjadi 0,5 detik sebelum saya memulai proses penyaringan. Bagaimana cara sudut yang benar untuk membuat penundaan ini?
Memasukkan
<input ng-model="xyz" ng-change="FilterByName()" />
Ulang
<div ng-repeat"foo in bar">
<p>{{foo.bar}}</p>
</div>
Fungsi Filter
$scope.FilterByName = function () {
//Filtering Stuff Here
});
Terima kasih
$timeout
untuk 500ms.$scope.FilterByName = function () { $timeout(_filterByName , 500)
$timeout.cancel(timeoutpromise)
jika satu waktu tunggu sedang berlangsung dan perubahan lain dipicu.Jawaban:
AngularJS 1.3+
Sejak AngularJS 1.3 Anda dapat memanfaatkan
debounce
properti yangngModelOptions
disediakan untuk mencapai itu dengan sangat mudah tanpa menggunakan$timeout
sama sekali. Berikut contohnya:HTML:
JS:
-- ATAU --
Periksa Biola
Sebelum AngularJS 1.3
Anda harus menggunakan $ timeout untuk menambahkan penundaan dan mungkin dengan penggunaan $ timeout.cancel (previoustimeout) Anda dapat membatalkan batas waktu sebelumnya dan menjalankan yang baru (membantu mencegah pemfilteran dijalankan beberapa kali secara berurutan dalam jarak waktu)
Berikut ini contohnya:
sumber
ng-model-options
itu hanya ditambahkan di Angular v1.3 (dan properti debounce di beta.8 ). Mereka yang masih perlu menggunakan Angular versi lama harus menggunakan solusi lain, seperti dari PSL, atau dengan menggunakan modul eksternal seperti ng-debounce .Anda dapat menggunakan
$timeout
untuk menambahkan penundaan dan mungkin dengan penggunaan$timeout.cancel(previoustimeout)
Anda dapat membatalkan waktu tunggu sebelumnya dan menjalankan yang baru (membantu mencegah pemfilteran dijalankan beberapa kali secara berurutan dalam interval waktu)Contoh:-
Plnkr
sumber
ng-change
ketika saya tidak ingin menolak model.Saya tahu pertanyaan itu terlalu tua. Namun tetap ingin menyediakan satu cara yang lebih cepat untuk mencapai hal ini dengan menggunakan debouncing .
Jadi kodenya bisa ditulis sebagai
Debounce akan mengambil angka dalam milidetik.
sumber
atau Anda dapat menggunakan perintah 'typeahead-wait-ms = "1000"' dari angular-ui
sumber