Voici l'exemple dans la documentation:
// with query, resulting in /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})
Réf: https://router.vuejs.org/en/essentials/navigation.html
Comme mentionné dans ces documents, router.replace
fonctionne commerouter.push
Donc, vous semblez avoir raison dans votre exemple de code en question. Mais je pense que vous devrez peut-être inclure l'un name
ou l' autre path
paramètre également, de sorte que le routeur ait un itinéraire vers lequel naviguer. Sans un name
ou path
, cela n'a pas l'air très significatif.
C'est ma compréhension actuelle maintenant:
query
est facultatif pour le routeur - quelques informations supplémentaires pour que le composant construise la vue
name
ou path
est obligatoire - il décide du composant à afficher dans votre <router-view>
.
Cela pourrait être l'élément manquant dans votre exemple de code.
EDIT: Détails supplémentaires après commentaires
Avez-vous essayé d'utiliser des routes nommées dans ce cas? Vous avez des routes dynamiques et il est plus facile de fournir des paramètres et des requêtes séparément:
routes: [
{ name: 'user-view', path: '/user/:id', component: UserView },
// other routes
]
puis dans vos méthodes:
this.$router.replace({ name: "user-view", params: {id:"123"}, query: {q1: "q1"} })
Techniquement, il n'y a pas de différence entre ce qui précède et this.$router.replace({path: "/user/123", query:{q1: "q1"}})
, mais il est plus facile de fournir des paramètres dynamiques sur des routes nommées que de composer la chaîne de route. Mais dans les deux cas, les paramètres de requête doivent être pris en compte. Dans les deux cas, je n'ai rien trouvé de mal dans la façon dont les paramètres de requête sont traités.
Une fois que vous êtes à l'intérieur de la route, vous pouvez récupérer vos paramètres dynamiques en tant que this.$route.params.id
et vos paramètres de requête en tant que this.$route.query.q1
.