Aqui está o exemplo em docs:
// with query, resulting in /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})
Ref: https://router.vuejs.org/en/essentials/navigation.html
Conforme mencionado nesses documentos, router.replace
funciona comorouter.push
Então, você parece ter acertado em seu código de amostra em questão. Mas acho que você pode precisar incluir o parâmetro name
ou path
também, para que o roteador tenha alguma rota para navegar. Sem um name
ou path
, não parece muito significativo.
Este é meu entendimento atual agora:
query
é opcional para o roteador - algumas informações adicionais para o componente construir a visão
name
ou path
é obrigatório - ele decide qual componente mostrar em seu <router-view>
.
Isso pode ser o que está faltando em seu código de amostra.
EDIT: detalhes adicionais após comentários
Você já tentou usar rotas nomeadas neste caso? Você tem rotas dinâmicas e é mais fácil fornecer parâmetros e consultas separadamente:
routes: [
{ name: 'user-view', path: '/user/:id', component: UserView },
// other routes
]
e então em seus métodos:
this.$router.replace({ name: "user-view", params: {id:"123"}, query: {q1: "q1"} })
Tecnicamente, não há diferença entre o acima e this.$router.replace({path: "/user/123", query:{q1: "q1"}})
, mas é mais fácil fornecer parâmetros dinâmicos em rotas nomeadas do que compor a string de rota. Mas em ambos os casos, os parâmetros de consulta devem ser levados em consideração. Em qualquer dos casos, não consegui encontrar nada de errado com a forma como os parâmetros de consulta são tratados.
Depois de estar dentro da rota, você pode buscar seus parâmetros dinâmicos como this.$route.params.id
e seus parâmetros de consulta como this.$route.query.q1
.