Saya menggunakan $http
layanan AngularJS untuk membuat permintaan Ajax.
Bagaimana GIF pemintal (atau jenis indikator sibuk lainnya) ditampilkan saat permintaan Ajax dijalankan?
Saya tidak melihat sesuatu seperti ajaxstartevent
dalam dokumentasi AngularJS.
angularjs
ajax
busyindicator
Ajay Beniwal
sumber
sumber
Jawaban:
Berikut
inimantra terakhir AngularJS:Berikut ini sisanya (HTML / CSS) .... menggunakan
untuk beralih. CATATAN: di atas digunakan dalam modul sudut di awal posting
sumber
angular.element('#mydiv').show()
sebagai gantinya$('#mydiv').show()
ng-class
arahan alih-alih menggunakan JQuery untuk menampilkan dan menyembunyikan elemen?Ini sangat tergantung pada kasus penggunaan khusus Anda, tetapi cara sederhana akan mengikuti pola seperti ini:
Dan kemudian bereaksi padanya di templat Anda:
sumber
loading
sebagai integer$scope.loading = 0;
, ketika permintaan mulai Anda lakukan$scope.loading++;
, dan ketika itu berakhir Anda lakukan$scope.loading--;
. Dan tidak ada yang berubah dalam template. Jadi pemintal ditampilkan ketika setidaknya ada satu permintaan sedang berlangsung, dan disembunyikan sepanjang waktu$scope.loading = false
keberhasilan dan panggilan balik yang gagal, adalah dengan memasukkannya ke dalam.finally()
. Itu akan terlihat seperti:mySvc.get().then(success, fail).finally(function() { $scope.loading = false; });
Ini versi menggunakan
directive
danng-hide
.Ini akan menampilkan loader selama semua panggilan melalui layanan sudut
$http
.Dalam templat:
<div class="loader" data-loading></div>
pengarahan:
dengan menggunakan
ng-hide
kelas pada elemen, Anda dapat menghindari jquery.Kustomisasi: tambahkan
interceptor
Jika Anda membuat pemuatan-interseptor, Anda dapat menampilkan / menyembunyikan loader berdasarkan suatu kondisi.
pengarahan:
pencegat:
spinner
kapanresponse.background === true;
request
dan / atauresponse
untuk mengatur$rootScope.$broadcast("loader_show");
atau$rootScope.$broadcast("loader_hide");
info lebih lanjut tentang menulis interseptor
sumber
$http
layanan apa pun.Jika Anda menggunakan ngResource, atribut $ resolved dari suatu objek berguna untuk loader:
Untuk sumber daya sebagai berikut:
Anda bisa menautkan loader ke atribut $ resolved dari objek resource:
sumber
https://github.com/wongatech/angular-http-loader adalah proyek yang bagus untuk ini.
Contoh di sini http://wongatech.github.io/angular-http-loader/
Kode di bawah ini menunjukkan contoh template / loader.tpl.html ketika permintaan sedang terjadi.
sumber
Baru saja menemukan
angular-busy
arahan yang menunjukkan loader sedikit tergantung pada beberapa panggilan async.Misalnya, jika Anda harus membuat
GET
, referensi janji di Anda$scope
,dan menyebutnya seperti ini:
Ini dia GitHub.
Anda juga dapat menginstalnya menggunakan
bower
(jangan lupa untuk memperbarui dependensi proyek Anda):sumber
Jika Anda membungkus panggilan api Anda dalam layanan / pabrik, maka Anda dapat melacak penghitung pemuatan di sana (per jawaban dan saran simultan yang sangat baik oleh @Jaylin), dan merujuk penghitung pemuatan melalui arahan. Atau kombinasi keduanya.
WRAPPER API
ARAH PEMINTIP
PEMAKAIAN
sumber
Untuk pemuatan dan model halaman, cara termudah adalah dengan menggunakan
ng-show
arahan dan menggunakan salah satu variabel data lingkup. Sesuatu seperti:Di sini, sementara
someObject
tidak terdefinisi, pemintal akan ditampilkan. Setelah layanan kembali dengan data dansomeObject
diisi, pemintal akan kembali ke status tersembunyi.sumber
Ini adalah cara termudah untuk menambahkan pemintal, saya kira: -
Anda dapat menggunakan ng-show dengan tag div dari salah satu pemintal cantik ini http://tobiasahlin.com/spinkit/ {{Ini bukan halaman saya}}
dan kemudian Anda bisa menggunakan logika semacam ini
sumber
Tambahkan css ini:
Dan hanya di sudut Anda tambahkan:
$ rootScope.loading = false; $ rootScope.loading = true; -> ketika $ http.get berakhir.
sumber
Membagikan versi saya tentang jawaban hebat dari @bulltorious, diperbarui untuk bangunan bersudut yang lebih baru (saya menggunakan versi 1.5.8 dengan kode ini), dan juga memasukkan gagasan @ JMaylin tentang menggunakan penghitung agar kuat untuk beberapa permintaan simultan, dan pilihan untuk melewatkan menampilkan animasi untuk permintaan yang membutuhkan waktu kurang dari beberapa milidetik minimum:
sumber
Anda dapat menggunakan pencegat sudut untuk mengelola panggilan permintaan http
https://stackoverflow.com/a/49632155/4976786
sumber
Cara sederhana tanpa pencegat atau jQuery
Ini adalah cara sederhana untuk menunjukkan pemintal yang tidak memerlukan perpustakaan pihak ketiga, pencegat, atau jQuery.
Di controller, atur dan reset bendera.
Di HTML, gunakan bendera:
The
vm.starting
bendera diaturtrue
ketika XHR dimulai dan dibersihkan ketika selesai XHR.sumber
Ini bekerja dengan baik untuk saya:
HTML:
Sudut:
Sementara janji yang dikembalikan dari $ http sedang menunggu, ng-show akan mengevaluasinya sebagai "benar". Ini secara otomatis diperbarui setelah janji terselesaikan ... yang persis seperti yang kita inginkan.
sumber
Digunakan intersepter berikut untuk menampilkan bilah pemuatan atas permintaan http
sumber
sumber
buat direktif dengan kode ini:
sumber
Solusi lain untuk menunjukkan pemuatan di antara berbagai perubahan url adalah:
Dan kemudian di markup hanya beralih dengan pemintal
ng-show="loading"
.Jika Anda ingin menampilkannya pada permintaan ajax tambahkan saja
$scope.loading++
ketika permintaan dimulai dan ketika itu berakhir tambahkan$scope.loading--
.sumber
Anda dapat mencoba sesuatu seperti ini juga:
Buat arahan:
Kemudian Anda menambahkan sesuatu seperti ini ke mainCtrl
Dan HTML dapat terlihat seperti ini:
sumber
Cara berikut akan mencatat semua permintaan, dan menyembunyikan hanya setelah semua permintaan dilakukan:
sumber
Karena fungsionalitas posisi: diperbaiki berubah baru-baru ini, saya mengalami kesulitan menampilkan loader gif di atas semua elemen, jadi saya harus menggunakan jQuery inbuilt angular .
Html
Css
Pengendali
Semoga ini membantu :)
sumber
Semua jawaban atau rumit, atau perlu mengatur beberapa variabel pada setiap permintaan yang merupakan praktik yang sangat salah jika kita tahu konsep KERING. Contoh interseptor sederhana di sini, saya mengatur mouse menunggu ketika ajax mulai dan mengaturnya ke otomatis ketika ajax berakhir.
Kode harus ditambahkan dalam konfigurasi aplikasi
app.config
. Saya menunjukkan cara mengubah mouse saat memuat tetapi di sana dimungkinkan untuk menampilkan / menyembunyikan konten loader, atau menambahkan, menghapus beberapa kelas css yang menunjukkan loader.Interceptor akan berjalan pada setiap panggilan ajax, jadi tidak perlu membuat variabel boolean khusus ($ scope.loading = true / false dll.) Pada setiap panggilan http.
sumber
Berikut ini adalah implementasi saya, sesederhana pertunjukan dan penghitung permintaan.
Itu menggunakan layanan baru untuk semua permintaan ke $ http:
Dan kemudian Anda dapat menggunakan basis loader Anda pada jumlah panggilan saat ini:
sumber
jika Anda ingin menampilkan loader untuk setiap panggilan permintaan http maka Anda dapat menggunakan pencegat sudut untuk mengelola panggilan permintaan http,
di sini adalah kode sampel
sumber
Cukup gunakan ng-show dan boolean
Tidak perlu menggunakan arahan, tidak perlu rumit.
Berikut adalah kode yang akan diletakkan di sebelah tombol kirim atau di mana pun Anda menginginkan pemintal:
Dan kemudian di controller Anda:
sumber
Berikut adalah solusi saya yang saya rasa banyak easer yang diposting di sini. Tidak yakin seberapa "cantik" itu, tapi itu menyelesaikan semua masalah saya
Saya memiliki gaya css yang disebut "memuat"
Html untuk memuat div bisa apa saja tetapi saya menggunakan beberapa ikon FontAwesome dan metode putaran di sana:
Pada elemen yang ingin Anda sembunyikan, cukup tulis ini:
dan dalam fungsi saya hanya mengatur ini pada beban.
Saya menggunakan SignalR sehingga dalam fungsi hubProxy.client.allLocks (ketika selesai melalui kunci) saya menjorok menempatkan
Ini juga menyembunyikan {{someField}} ketika halaman memuat karena saya mengatur kelas memuat pada beban dan AngularJS menghapusnya setelah itu.
sumber