Bagi siapa pun seperti saya yang menemukan pertanyaan ini, berikut ini mungkin berguna.
Saya memiliki masalah serupa dan awalnya mencoba menggunakan location.go dan location.replaceState seperti yang disarankan dalam jawaban lain di sini. Namun saya mengalami masalah ketika saya harus menavigasi ke halaman lain di aplikasi karena navigasi relatif terhadap rute saat ini dan rute saat ini tidak diperbarui oleh location.go atau location.replaceState (router tidak tahu apa-apa tentang apa yang dilakukan ini pada URL)
Intinya saya membutuhkan solusi yang TIDAK memuat ulang halaman / komponen ketika parameter rute berubah tetapi DID memperbarui status rute secara internal.
Saya akhirnya menggunakan parameter kueri. Anda dapat menemukannya lebih lanjut di sini: https://angular-2-training-book.rangle.io/handout/routing/query_params.html
Jadi jika Anda perlu melakukan sesuatu seperti menyimpan pesanan dan mendapatkan ID pesanan, Anda dapat memperbarui URL halaman Anda seperti yang ditunjukkan di bawah ini. Memperbarui lokasi pusat dan data terkait pada peta akan serupa
// let's say we're saving an order. Initally the URL is just blah/orders
save(orderId) {
// [Here we would call back-end to save the order in the database]
this.router.navigate(['orders'], { queryParams: { id: orderId } });
// now the URL is blah/orders?id:1234. We don't reload the orders
// page or component so get desired behaviour of not seeing any
// flickers or resetting the page.
}
dan Anda terus melacaknya dalam metode ngOnInit seperti:
ngOnInit() {
this.orderId = this.route
.queryParamMap
.map(params => params.get('id') || null);
// orderID is up-to-date with what is saved in database now, or if
// nothing is saved and hence no id query paramter the orderId variable
// is simply null.
// [You can load the order here from its ID if this suits your design]
}
Jika Anda perlu membuka halaman pesanan dengan pesanan baru (belum disimpan), Anda dapat melakukan:
this.router.navigate(['orders']);
Atau jika Anda perlu membuka halaman pesanan untuk pesanan yang sudah ada (tersimpan), Anda dapat melakukan:
this.router.navigate(['orders'], { queryParams: { id: '1234' } });