Đây là ví dụ trong tài liệu:
// with query, resulting in /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})
Tham khảo: https://router.vuejs.org/en/essentials/navigation.html
Như đã đề cập trong các tài liệu đó, router.replace
hoạt động nhưrouter.push
Vì vậy, bạn dường như có nó ngay trong mã mẫu của bạn được đề cập. Nhưng tôi nghĩ rằng bạn có thể cần phải bao gồm cả name
hoặc path
tham số, để bộ định tuyến có một số tuyến đường để điều hướng đến. Không có name
hoặc path
, nó trông không có ý nghĩa cho lắm.
Đây là hiểu biết hiện tại của tôi bây giờ:
query
là tùy chọn cho bộ định tuyến - một số thông tin bổ sung cho thành phần để xây dựng chế độ xem
name
hoặc path
là bắt buộc - nó quyết định thành phần nào sẽ hiển thị trong của bạn <router-view>
.
Đó có thể là điều còn thiếu trong mã mẫu của bạn.
CHỈNH SỬA: Chi tiết bổ sung sau khi nhận xét
Bạn đã thử sử dụng các tuyến đường được đặt tên trong trường hợp này chưa? Bạn có các tuyến đường động và việc cung cấp các thông số và truy vấn riêng biệt sẽ dễ dàng hơn:
routes: [
{ name: 'user-view', path: '/user/:id', component: UserView },
// other routes
]
và sau đó trong các phương pháp của bạn:
this.$router.replace({ name: "user-view", params: {id:"123"}, query: {q1: "q1"} })
Về mặt kỹ thuật, không có sự khác biệt giữa các điều trên và this.$router.replace({path: "/user/123", query:{q1: "q1"}})
, nhưng việc cung cấp các tham số động trên các tuyến đường được đặt tên sẽ dễ dàng hơn so với việc soạn chuỗi tuyến đường. Nhưng trong cả hai trường hợp, các tham số truy vấn nên được tính đến. Trong cả hai trường hợp, tôi không tìm thấy điều gì sai với cách xử lý các tham số truy vấn.
Sau khi bạn ở bên trong tuyến, bạn có thể tìm nạp thông số động của mình dưới dạng this.$route.params.id
và thông số truy vấn của bạn dưới dạng this.$route.query.q1
.