Berikut contohnya di dokumen:
// with query, resulting in /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})
Ref: https://router.vuejs.org/en/essentials/navigation.html
Seperti yang disebutkan dalam dokumen tersebut, router.replaceberfungsi sepertirouter.push
Jadi, Anda tampaknya sudah benar di kode sampel yang dipermasalahkan. Tapi saya pikir Anda mungkin perlu memasukkan parameter nameatau pathjuga, sehingga router memiliki beberapa rute untuk dinavigasi. Tanpa nameatau path, itu tidak terlihat sangat berarti.
Inilah pemahaman saya saat ini:
query bersifat opsional untuk router - beberapa info tambahan bagi komponen untuk membuat tampilan
nameatau pathwajib - ini memutuskan komponen apa yang akan ditampilkan di <router-view>.
Itu mungkin hal yang hilang dalam kode sampel Anda.
EDIT: Detail tambahan setelah komentar
Sudahkah Anda mencoba menggunakan rute bernama dalam kasus ini? Anda memiliki rute dinamis, dan lebih mudah untuk menyediakan parameter dan kueri secara terpisah:
routes: [
{ name: 'user-view', path: '/user/:id', component: UserView },
// other routes
]
dan kemudian dalam metode Anda:
this.$router.replace({ name: "user-view", params: {id:"123"}, query: {q1: "q1"} })
Secara teknis tidak ada perbedaan antara di atas dan this.$router.replace({path: "/user/123", query:{q1: "q1"}}), tetapi lebih mudah untuk menyediakan parameter dinamis pada rute bernama daripada membuat string rute. Tetapi dalam kedua kasus, parameter kueri harus diperhitungkan. Dalam kedua kasus tersebut, saya tidak dapat menemukan sesuatu yang salah dengan cara penanganan parameter kueri.
Setelah Anda berada di dalam rute, Anda dapat mengambil parameter dinamis sebagai this.$route.params.iddan parameter kueri Anda sebagai this.$route.query.q1.