一、问题诊断
1. 根路径配置错误(直接指向 App.vue)
javascript">const router = createRouter({routes: [{path: "/",component: () => import("@/App.vue") // ❌ 错误:App.vue 不应该作为路由组件}]
})
• 问题本质:App.vue
是 Vue 应用的 根容器组件,通常包含 <router-view>
标签。如果将它作为路由组件挂载到根路径 /
,会导致路由系统嵌套混乱,形成 App.vue → <router-view> → App.vue → <router-view>...
的无限循环。
• 后果:路由参数无法正常传递,useRoute().query
获取为空。
2. 未正确使用 <router-view>
标签
如果 App.vue
中没有 <router-view>
,或直接硬编码了其他组件(如 <Home />
),会导致路由系统未激活:
<!-- ❌ 错误示例:App.vue -->
<template><Home /> <!-- 直接渲染组件,绕过路由系统 -->
</template>
二、解决方案
1. 重构路由配置文件
将 App.vue
作为全局容器,不要将其作为路由组件,正确配置应为:
javascript">// router/index.js
const router = createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{path: "/",name: "home",component: () => import("@/views/Home.vue") // ✅ 指向实际页面组件},// 其他路由...]
})
2. 修正 App.vue 结构
确保 App.vue
只包含全局布局和 <router-view>
:
<!-- App.vue -->
<template><!-- 全局导航栏等公共元素 --><nav>...</nav><!-- 路由出口 --><router-view /> <!-- ✅ 核心:路由内容在此渲染 -->
</template>
3. 验证参数获取
在页面组件(如 Home.vue
)中获取参数:
<!-- views/Home.vue -->
<script setup>
import { useRoute } from 'vue-router'const route = useRoute()// ✅ 正确获取参数
console.log('Token:', route.query.token)
</script>
三、最终路由配置示例
javascript">// router/index.js
const router = createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{path: "/",name: "home",component: () => import("@/views/Home.vue") // 实际页面组件},{path: "/about",name: "about",component: () => import("@/views/About.vue")}]
})
四、关键验证步骤
- 检查浏览器控制台:查看是否有
[Vue Router warn]: No match found for location with path...
等路由警告。 - 打印完整路由对象:
javascript">// 在页面组件中调试
console.log('完整路由信息:', route)
- 访问 URL 直接验证:
http://localhost:5173/?token=abc&senderToken=def
应能在 Home.vue
中正确输出 token: abc
。
五、补充说明
• 通配符路由处理:如果你有 404 页面,需确保通配符路由定义在最后:
javascript">routes: [{ path: '/', component: Home },// ...其他路由{ path: '/:pathMatch(.*)*', component: NotFound } // ✅ 最后定义
]
• 服务端重定向:如果是 SPA 应用,确保服务器配置正确,所有路径重定向到 index.html
。
按此方案调整后,你的 URL 参数应该可以正常解析。如果仍有问题,请提供完整的 App.vue
和 router/index.js
文件内容。