Bagaimana cara menampilkan layar pemuatan ketika saya mengubah rute di Angular 2?
html
css
angular
angular2-routing
Lucas
sumber
sumber
Jawaban:
Router Sudut saat ini menyediakan Acara Navigasi. Anda dapat berlangganan ini dan membuat perubahan UI yang sesuai. Ingatlah untuk menghitung dalam Peristiwa lain seperti
NavigationCancel
danNavigationError
untuk menghentikan pemintal jika transisi router gagal.app.component.ts - komponen root Anda
app.component.html - tampilan root Anda
Jawaban yang Ditingkatkan Kinerja : Jika Anda peduli dengan kinerja, ada metode yang lebih baik, ini sedikit lebih membosankan untuk diterapkan tetapi peningkatan kinerja akan sepadan dengan kerja ekstra. Alih-alih menggunakan
*ngIf
untuk menampilkan spinner secara bersyarat, kita dapat memanfaatkan Angular'sNgZone
danRenderer
untuk mengaktifkan / menonaktifkan spinner yang akan melewati deteksi perubahan Angular saat kita mengubah status spinner. Saya menemukan ini untuk membuat animasi lebih halus dibandingkan dengan menggunakan*ngIf
atauasync
pipa.Ini mirip dengan jawaban saya sebelumnya dengan beberapa penyesuaian:
app.component.ts - komponen root Anda
app.component.html - tampilan root Anda
sumber
router navigation
danit triggering the spinner
kemudian tidak bisa menghentikannya.navigationInterceptor
sepertinya solusi tetapi saya tidak yakin apakah ada hal lain yang menunggu untuk dipecahkan. Jika dicampur denganasync requests
itu akan menimbulkan masalah lagi, saya kira.display
salah satunone
atauinline
.'md-spinner' is not a known element:
. Saya cukup baru di Angular. Bisakah Anda memberi tahu saya apa yang mungkin menjadi kesalahannya?UPDATE: 3 Sekarang saya telah mengupgrade ke Router baru, pendekatan @borislemke tidak akan berfungsi jika Anda menggunakan
CanDeactivate
guard. Saya merendahkan metode lama saya,ie:
jawaban iniUPDATE2 : Peristiwa router di new-router terlihat menjanjikan dan jawaban dari @borislemke tampaknya mencakup aspek utama implementasi spinner, saya belum mengujinya tetapi saya merekomendasikannya.
UPDATE1: Saya menulis jawaban ini di era
Old-Router
, ketika dulu hanya ada satu peristiwa yangroute-changed
diberitahukan melaluirouter.subscribe()
. Saya juga merasa kelebihan pendekatan di bawah ini dan mencoba melakukannya hanya dengan menggunakanrouter.subscribe()
, dan itu menjadi bumerang karena tidak ada cara untuk mendeteksinyacanceled navigation
. Jadi saya harus kembali ke pendekatan panjang (kerja ganda).Jika Anda tahu jalan di Angular2, inilah yang Anda perlukan
Boot.ts
Komponen Root- (MyApp)
Spinner-Component (akan berlangganan Spinner-service untuk mengubah nilai aktif yang sesuai)
Spinner-Service (bootstrap layanan ini)
Tentukan observable untuk dilanggan oleh spinner-component untuk mengubah status pada perubahan, dan berfungsi untuk mengetahui dan mengatur spinner aktif / tidak aktif.
Semua Komponen Rute Lainnya
(Sampel):
sumber
spinner-service
saat ini Anda hanya perlu ke bagian lain untuk membuatnya berfungsi. Dan ingat ini untukangular2-rc-1
Mengapa tidak hanya menggunakan css sederhana:
Dan dalam gaya Anda:
Atau bahkan kita bisa melakukan ini untuk jawaban pertama:
Dan kemudian baru saja
Triknya di sini adalah, rute dan komponen baru akan selalu muncul setelah outlet-router , jadi dengan pemilih css sederhana kita dapat menampilkan dan menyembunyikan pemuatan.
sumber
Jika Anda memiliki logika khusus yang diperlukan untuk rute pertama, hanya Anda yang dapat melakukan hal berikut:
AppComponent
Saya membutuhkan ini untuk menyembunyikan footer halaman saya, yang sebaliknya muncul di bagian atas halaman. Juga jika Anda hanya menginginkan sebuah loader untuk halaman pertama, Anda dapat menggunakan ini.
sumber
Anda juga bisa menggunakan solusi yang ada ini . Demo ada di sini . Sepertinya bilah memuat youtube. Saya baru saja menemukannya dan menambahkannya ke proyek saya sendiri.
sumber