Lebih
Sudut: Cara update queryParams tanpa mengubah rute
Saya mencoba untuk meng-update (menambah, menghapus) queryParams dari sebuah komponen. Di angularJS, itu digunakan untuk menjadi mungkin berkat :
$location.search('f', 'filters[]'); // setter
$location.search()['filters[]']; // getter
Saya memiliki sebuah aplikasi dengan daftar yang pengguna dapat menyaring, order, dll dan saya ingin set di queryParams url semua filter diaktifkan sehingga ia dapat copy/paste url atau berbagi dengan orang lain.
Namun, I don't ingin halaman saya untuk menjadi reloaded setiap kali filter yang dipilih.
Ini bisa dilakukan dengan router baru?
89
7
Anda dapat menavigasi untuk saat ini rute dengan permintaan baru params, yang tidak akan reload halaman anda, tapi akan update query params.
Sesuatu seperti (dalam komponen):
Catatan, yang padahal itu tidak't reload halaman, itu akan mendorong entri baru ke browser's sejarah. Jika anda ingin menggantinya dalam sejarah bukannya menambahkan nilai baru ke sana, anda bisa menggunakan
{ queryParams: queryParams, replaceUrl: true }
.EDIT: Seperti telah di kemukakan dalam komentar,
[]
danrelativeTo
properti yang hilang dalam contoh asli, sehingga bisa berubah rute juga, tidak hanya permintaan params. Yang tepatini.router.menavigasi
penggunaan akan dalam kasus ini:Pengaturan nilai parameter baru untuk
null
akan menghapus param dari URL.@Radosław Roszkowiak's jawaban hampir benar kecuali yang
relativeTo: ini.rute
diperlukan sebagai berikut:Di Sudut 5 anda dapat dengan mudah memperoleh dan memodifikasi salinan urlTree oleh parsing url saat ini. Ini akan mencakup permintaan params dan fragmen.
"benar" untuk memodifikasi parameter kueri mungkin dengan createUrlTree seperti di bawah ini yang menciptakan yang baru UrlTree dari saat ini sementara membiarkan kita memodifikasinya dengan menggunakan NavigationExtras.
Dalam rangka untuk menghapus query parameter dengan cara ini anda dapat mengaturnya untuk
undefined
ataunull
.Mencoba
akan bekerja untuk rute yang sama navigasi lain dari tanda kutip tunggal.
Jika anda ingin mengubah query params tanpa mengubah rute. lihat di bawah ini contoh yang mungkin bisa membantu anda: rute saat ini adalah : /cari & Target rute(tanpa reload halaman) : /search?query=cinta
harap catatan : anda dapat menggunakan ini.router.menavigasi( ['cari'] bukan ini.router.menavigasi( ['.']
Jawaban dengan memilih sebagian bekerja untuk saya. Url browser tetap sama tapi saya
routerLinkActive
tidak lagi bekerja setelah navigasi.Solusi saya adalah untuk menggunakan lotation.pergi:
Aku digunakan HttpParams untuk membangun query string karena saya sudah menggunakannya untuk mengirim informasi dengan httpClient. tapi anda hanya dapat membangun sendiri.
dan
ini._router.url.split("?")[0]
, adalah untuk menghapus semua sebelumnya query string dari url saat ini.Pertama, kita perlu mengimpor router modul dari sudut router dan menyatakan nama alias
ini.router.menavigasi([], { queryParams: {_id: "abc", di malam hari: "1", nama: "dfd"} });
Ini akan memperbarui kueri params di saat aku.e diaktifkan rute
ini.router.menavigasi(['/abc'], { queryParams: {_id: "abc", di malam hari: "1", nama: "dfd"} });
Ini akan memperbarui kueri params di "abc" rute bersama dengan tiga permintaan paramters
Untuk mengambil query params:-