Saya membuat situs web real estat menggunakan Angular 2, Google Maps, dll. Dan ketika pengguna mengubah pusat peta, saya melakukan penelusuran ke API yang menunjukkan posisi peta saat ini serta radiusnya. Masalahnya, saya ingin mencerminkan nilai-nilai itu di url tanpa memuat ulang seluruh halaman. Apakah itu mungkin? Saya telah menemukan beberapa solusi menggunakan AngularJS 1.x tetapi tidak ada tentang Angular 2.
javascript
angular
routes
angular2-routing
Marcos Basualdo
sumber
sumber
Jawaban:
Anda dapat menggunakan
location.go(url)
yang pada dasarnya akan mengubah url Anda, tanpa mengubah rute aplikasi.Pertanyaan terkait yang menjelaskan
location.go
tidak akan intimRouter
sampai terjadi perubahan.sumber
import { Location } from '@angular/common';
dalam Angular 4constructor(private location: Location){ }
location.go()
sementara Anda seharusnya mengetikthis.location.go()
. Saat Anda memancarkanthis.
, Anda memanggil antarmuka lokasi Typecript.Pada RC6 Anda dapat melakukan hal berikut untuk mengubah URL tanpa mengubah status dan dengan demikian menyimpan riwayat rute Anda
sumber
Error: Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'some/newstate'
Menggunakan
location.go(url)
adalah cara yang harus dilakukan, tetapi alih-alih melakukan hardcode url, pertimbangkan untuk membuatnya menggunakanrouter.createUrlTree()
.Mengingat bahwa Anda ingin melakukan panggilan router berikut:
this.router.navigate([{param: 1}], {relativeTo: this.activatedRoute})
tetapi tanpa memuat ulang komponen, itu dapat ditulis ulang sebagai:sumber
this.router.createUrlTree([], {relativeTo: this.activatedRoute, queryParams: {param: 1}}).toString()
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
dan Anda terus melacaknya dalam metode ngOnInit seperti:
Jika Anda perlu membuka halaman pesanan dengan pesanan baru (belum disimpan), Anda dapat melakukan:
Atau jika Anda perlu membuka halaman pesanan untuk pesanan yang sudah ada (tersimpan), Anda dapat melakukan:
sumber
Saya mengalami kesulitan besar untuk membuatnya bekerja dalam rilis RCx angular2. Paket Lokasi telah dipindahkan, dan menjalankan location.go () di dalam konstruktor () tidak akan berfungsi. Ini harus ngOnInit () atau yang lebih baru dalam siklus proses. Berikut beberapa contoh kode:
Berikut adalah sumber daya sudut tentang masalah tersebut: https://angular.io/docs/ts/latest/api/common/index/Location-class.html https://angular.io/docs/ts/latest/api/ common / index / LocationStrategy-class.html
sumber
Saya menggunakan cara ini untuk mendapatkannya:
- EDIT -
Saya pikir saya harus menambahkan beberapa informasi lagi untuk ini.
Jika Anda menggunakan
this.location.replaceState()
router aplikasi Anda tidak diperbarui, jadi jika Anda menggunakan informasi router nanti tidak sama untuk ini di browser Anda. Misalnya jika Anda menggunakanlocalizeService
untuk mengubah bahasa, setelah mengganti bahasa aplikasi Anda kembali ke URL terakhir di mana Anda sebelumnya mengubahnya denganthis.location.replaceState()
.Jika Anda tidak menginginkan perilaku ini, Anda dapat memilih metode lain untuk memperbarui URL, seperti:
Dalam opsi ini browser Anda juga tidak menyegarkan tetapi
URL
perubahan Anda juga disuntikkan keRouter
dalam aplikasi Anda, jadi ketika Anda mengganti bahasa Anda tidak memiliki masalah seperti dalamthis.location.replaceState()
.Tentu saja Anda dapat memilih metode untuk kebutuhan Anda. Yang pertama lebih ringan karena Anda tidak menggunakan aplikasi Anda lebih dari perubahan
URL
di browser.sumber
Bagi saya itu sebenarnya adalah campuran keduanya dengan Angular 4.4.5.
Menggunakan router.navigate terus merusak url saya dengan tidak menghormati bagian realtiveTo: activatedRoute.
Saya telah berakhir dengan:
sumber
Gunakan atribut queryParamsHandling: 'merge' saat mengubah url.
sumber