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

Vue 2中Vue Router路由跳转时URL异常追加问题求助

解决Vue Router跳转时URL异常追加的问题

这个问题我之前也碰到过,本质是没搞清楚Vue Router里相对路径和绝对路径的区别导致的!

问题根源

你执行的this.$router.push({ path: 'memberships' });里的memberships是相对路径——它会基于当前页面的路由路径去拼接。比如当前在根路径/,跳转后会到/memberships;但之后再用类似path: 'shop'这种相对路径跳转时,就会以当前的/memberships为基础,拼接成/memberships/shop,这就是你看到的异常URL的原因。

两种快速解决方法

1. 始终使用绝对路径

所有跳转的path前面加上/,让路由从根路径开始匹配,就不会出现追加问题:

// 正确跳转到memberships列表页(绝对路径)
this.$router.push({ path: '/memberships' });

// 后续跳转shop/deals也用绝对路径
this.$router.push({ path: '/shop' }); // 会正确跳转到http://localhost:8000/shop
this.$router.push({ path: '/deals' }); // 会正确跳转到http://localhost:8000/deals

2. 使用命名路由(更推荐)

给你的路由配置加上name属性,跳转时通过name来指定路由,这样不管当前在哪个路径下,都会精准匹配到对应的路由:

首先修改你的路由配置:

const routes = [
  {
    path: '/memberships',
    name: 'MembershipsList', // 给列表页加名字
    component: MembershipsListComponent
  },
  {
    path: '/memberships/:id',
    name: 'MembershipDetail', // 给详情页加名字
    component: MembershipDetailComponent
  },
  {
    path: '/shop',
    name: 'Shop',
    component: ShopComponent
  },
  {
    path: '/deals',
    name: 'Deals',
    component: DealsComponent
  }
]

然后跳转时用name代替path:

// 跳转到会员列表
this.$router.push({ name: 'MembershipsList' });

// 跳转到shop
this.$router.push({ name: 'Shop' });

// 跳转到会员详情页(带参数)
this.$router.push({ name: 'MembershipDetail', params: { id: 'bronze' } });

总结

相对路径适合在嵌套路由里基于父路由跳转,但如果是全局跳转,绝对路径或命名路由会更可靠,能彻底避免这种URL拼接异常的问题。

内容的提问来源于stack exchange,提问作者Bilal Rabbi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:39:12