Anda dapat menavigasi ke rute saat ini dengan parameter kueri baru, yang tidak akan memuat ulang halaman Anda, tetapi akan memperbarui parameter kueri.
Sesuatu seperti (dalam komponen):
constructor(private router: Router) { }
public myMethodChangingQueryParams() {
const queryParams: Params = { myParam: 'myNewValue' };
this.router.navigate(
[],
{
relativeTo: activatedRoute,
queryParams: queryParams,
queryParamsHandling: 'merge', // remove to replace all query params by provided
});
}
Perhatikan, meskipun tidak memuat ulang halaman, ini akan mendorong entri baru ke riwayat browser. Jika Anda ingin menggantinya dalam sejarah daripada menambahkan nilai baru di sana, Anda bisa menggunakan { queryParams: queryParams, replaceUrl: true }
.
EDIT: Seperti yang sudah ditunjukkan di komentar, []
dan relativeTo
properti hilang dalam contoh asli saya, jadi itu bisa mengubah rute juga, bukan hanya parameter kueri. Penggunaan yang tepat this.router.navigate
dalam hal ini:
this.router.navigate(
[],
{
relativeTo: this.activatedRoute,
queryParams: { myParam: 'myNewValue' },
queryParamsHandling: 'merge'
});
Mengatur nilai parameter baru menjadi null
akan menghapus parameter dari URL.
Radosław Roszkowiak
sumber
[]
alih-alih['.']
membuatnya berfungsithis.activatedRoute.queryParams.subscribe
dan melakukan berbagai pembaruan dalam komponen Anda, tetapi apakah ada cara Angular sederhana untuk memuat rute sedemikian rupa sehingga maju dan mundur akan bekerja secara otomatis?Jawaban @ Radosław Roszkowiak hampir benar kecuali
relativeTo: this.route
diperlukan seperti di bawah ini:sumber
Di Angular 5 Anda dapat dengan mudah mendapatkan dan memodifikasi salinan urlTree dengan mengurai url saat ini. Ini akan menyertakan parameter dan fragmen kueri.
"Cara yang benar" untuk mengubah parameter kueri mungkin dengan createUrlTree seperti di bawah ini yang membuat UrlTree baru dari saat ini sambil membiarkan kami memodifikasinya menggunakan NavigationExtras .
Untuk menghapus parameter kueri dengan cara ini Anda dapat mengaturnya ke
undefined
ataunull
.sumber
navigateByUrl
berbeda dengannavigate
- tidak hanya dengan parameter UrlTree. Lihat stackoverflow.com/a/45025432/271012Mencoba
akan berfungsi untuk navigasi rute yang sama selain tanda kutip tunggal.
sumber
Jawaban dengan suara terbanyak sebagian berhasil untuk saya. Url browser tetap sama tetapi url saya
routerLinkActive
tidak lagi berfungsi setelah navigasi.Solusi saya adalah menggunakan lotation.go:
Saya menggunakan HttpParams untuk membangun string kueri karena saya sudah menggunakannya untuk mengirim informasi dengan httpClient. tapi Anda bisa membuatnya sendiri.
dan
this._router.url.split("?")[0]
, adalah untuk menghapus semua string kueri sebelumnya dari url saat ini.sumber
this.location.path().split...
lebih baik?Saya akhirnya menggabungkan
urlTree
denganlocation.go
Tidak yakin apakah
toString
dapat menyebabkan masalah, tetapi sayangnyalocation.go
, tampaknya berbasis string.sumber
Jika Anda ingin mengubah parameter kueri tanpa mengubah rute. lihat contoh di bawah ini dapat membantu Anda: rute saat ini adalah: / search & Target route adalah (tanpa halaman reload): / search? query = love
harap dicatat: Anda dapat menggunakan this.router.navigate (['search'] daripada this.router.navigate (['.']
sumber
relativeTo:
, tetapi.then()
sangat membantu - tidak sadar bahwa navigation () mengembalikan janji, sangat senang Anda memposting!Pertama, kita perlu mengimpor modul router dari router sudut dan menyatakan nama aliasnya
1. Anda dapat mengubah parameter kueri dengan menggunakan fungsi "router.navigate" dan meneruskan parameter kueri
Ini akan memperbarui parameter kueri di rute yaitu diaktifkan saat ini
Di bawah ini akan dialihkan ke halaman abc dengan _id, hari dan nama sebagai parameter kueri
this.router.navigate (['/ abc'], {queryParams: {_id: "abc", day: "1", name: "dfd"}});
Ini akan memperbarui parameter kueri di rute "abc" bersama dengan tiga parameter kueri
Untuk mengambil parameter kueri: -
sumber