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.replacefonctionne 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 nameou l' autre pathparamètre également, de sorte que le routeur ait un itinéraire vers lequel naviguer. Sans un nameou 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
nameou pathest 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.idet vos paramètres de requête en tant que this.$route.query.q1.