You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue Router访问内层页面时侧边栏导航链接路径异常问题求助

问题根因

问题出在你的侧边栏导航链接使用了相对路径配置。Vue Router解析相对路径的to属性时,会基于当前页面的完整路由路径做拼接:

  • 当你处于/project/[项目ID]/overview这类一级子路由时,相对路径areas会被拼接为/project/[项目ID]/areas,符合预期
  • 当你处于/project/[项目ID]/vaccination/outer这类二级子路由时,相对路径overview会被拼接为/project/[项目ID]/vaccination/overview,就出现了多出来vaccination前缀的问题

解决方案

两种方案选一种即可,推荐第二种可维护性更高:

方案1:将导航链接改为绝对路径

你的侧边栏组件已经通过props拿到了projectId参数,直接把所有<router-link>的to属性从相对路径改为拼接父路由前缀的绝对路径:

<!-- 原来的写法 -->
<router-link :to="item.path">{{ item.name }}</router-link>

<!-- 修改后的写法 -->
<router-link :to="`/project/${projectId}/${item.path}`">{{ item.name }}</router-link>

子菜单的路径(比如vaccination/outer)也适用该规则,自动会生成正确的完整路径。

方案2:使用命名路由跳转(更推荐)

先给所有子路由补充唯一的name属性(注意你现有配置里vaccination/outer和archived的name重复了,要修正):

children: [
    {
        path: 'overview',
        name: 'projectOverview', // 新增唯一name
        component: require('../../../assets/js/components/Template/mvdProjectOverview.vue'),
    },
    {
        path: 'areas',
        name: 'projectAreas', // 新增唯一name
        component: require('../../../assets/js/components/Template/AddVaccinationArea.vue'),
    },
    // 其他所有子路由都补充唯一name,注意不要重复
    {
        path: 'vaccination/outer',
        name: 'projectOuterVaccinations',
        component: require('../../../assets/js/components/Template/OuterVaccinations.vue'),
    },
    {
        path: 'archived',
        name: 'projectArchived', // 修正重复的name
        component: require('../../../assets/js/components/Template/ArchivedRecords.vue'),
    },
]

然后侧边栏的导航链接用name + params的形式跳转,不需要手动拼接路径:

<router-link :to="{name: item.routeName, params: {projectId: projectId}}">
    {{ item.name }}
</router-link>

同时修改你的侧边栏配置,给每个导航项补充对应的路由name即可。


内容的提问来源于stack exchange,提问作者Rutvik D Mehta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:57:03