นี่คือตัวอย่างในเอกสาร:
// with query, resulting in /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})
อ้างอิง: https://router.vuejs.org/en/essentials/navigation.html
ตามที่กล่าวไว้ในเอกสารเหล่านั้นrouter.replace
ทำงานเหมือนrouter.push
ดูเหมือนว่าคุณจะมีสิทธิ์ในโค้ดตัวอย่างที่เป็นปัญหา แต่ฉันคิดว่าคุณอาจต้องใส่อย่างใดอย่างหนึ่งname
หรือpath
พารามิเตอร์ด้วยเพื่อให้เราเตอร์มีเส้นทางที่จะนำทางไป หากไม่มีname
หรือpath
ก็ดูไม่มีความหมายมากนัก
นี่คือความเข้าใจปัจจุบันของฉันตอนนี้:
query
เป็นทางเลือกสำหรับเราเตอร์ - ข้อมูลเพิ่มเติมบางอย่างสำหรับส่วนประกอบเพื่อสร้างมุมมอง
name
หรือpath
เป็นข้อบังคับ - เป็นตัวกำหนดองค์ประกอบที่จะแสดงใน<router-view>
ไฟล์.
นั่นอาจเป็นสิ่งที่ขาดหายไปในโค้ดตัวอย่างของคุณ
แก้ไข: รายละเอียดเพิ่มเติมหลังความคิดเห็น
คุณได้ลองใช้เส้นทางที่มีชื่อในกรณีนี้หรือไม่? คุณมีเส้นทางแบบไดนามิกและง่ายกว่าในการระบุพารามิเตอร์และแบบสอบถามแยกกัน:
routes: [
{ name: 'user-view', path: '/user/:id', component: UserView },
// other routes
]
จากนั้นในวิธีการของคุณ:
this.$router.replace({ name: "user-view", params: {id:"123"}, query: {q1: "q1"} })
ในทางเทคนิคไม่มีความแตกต่างระหว่างด้านบนและด้านบนthis.$router.replace({path: "/user/123", query:{q1: "q1"}})
แต่การจัดหาพารามิเตอร์ไดนามิกบนเส้นทางที่ตั้งชื่อนั้นง่ายกว่าการเขียนสตริงเส้นทาง แต่ในทั้งสองกรณีควรคำนึงถึงพารามิเตอร์ของข้อความค้นหาด้วย ไม่ว่าในกรณีใดฉันไม่พบสิ่งผิดปกติกับวิธีจัดการพารามิเตอร์แบบสอบถาม
หลังจากที่คุณอยู่ในเส้นทางที่คุณสามารถดึงข้อมูลพารามิเตอร์แบบไดนามิกของคุณเป็นและการค้นหาของคุณเป็นthis.$route.params.id
paramsthis.$route.query.q1