Oto przykład w dokumentach:
// with query, resulting in /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})
Ref: https://router.vuejs.org/en/essentials/navigation.html
Jak wspomniano w tych dokumentach, router.replace
działa jakrouter.push
Wygląda więc na to, że masz to dobrze w swoim przykładowym kodzie. Myślę jednak, że może być konieczne uwzględnienie jednego z parametrów name
lub path
, aby router miał jakąś trasę, do której należy nawigować. Bez name
lub path
nie wygląda to zbytnio.
Oto moje obecne rozumienie teraz:
query
jest opcjonalne dla routera - dodatkowe informacje dla komponentu, aby utworzyć widok
name
lub path
jest obowiązkowe - decyduje, który komponent ma się pojawić w Twoim <router-view>
.
To może być brakująca rzecz w twoim przykładowym kodzie.
EDYCJA: Dodatkowe szczegóły po komentarzach
Czy próbowałeś używać nazwanych tras w tym przypadku? Masz trasy dynamiczne i łatwiej jest osobno podać parametry i zapytania:
routes: [
{ name: 'user-view', path: '/user/:id', component: UserView },
// other routes
]
a następnie w swoich metodach:
this.$router.replace({ name: "user-view", params: {id:"123"}, query: {q1: "q1"} })
Technicznie nie ma różnicy między powyższymi a this.$router.replace({path: "/user/123", query:{q1: "q1"}})
, ale łatwiej jest podać parametry dynamiczne dla nazwanych tras niż tworzenie ciągu trasy. Ale w obu przypadkach należy wziąć pod uwagę parametry zapytania. W obu przypadkach nie mogłem znaleźć nic złego w sposobie obsługi parametrów zapytania.
Po znalezieniu się w trasie możesz pobrać parametry dynamiczne jako, this.$route.params.id
a parametry zapytania jako this.$route.query.q1
.