Vue路由跳转的N种姿势,总有一种适合你!

大家好,我是小杨,一个在前端圈摸爬滚打6年的老油条。今天咱们不聊人生理想,就聊聊Vue里那些让人又爱又恨的路由跳转方式。保证看完这篇,你再也不会在路由跳转上栽跟头!

一、路由跳转的"基本款"

1. 声明式导航 - 优雅的模板写法

html 复制代码
<router-link to="/home">回家</router-link>
<router-link :to="{ path: '/profile' }">我的主页</router-link>

的个人心得:

  • 就像穿衣服,这种写法最"体面"
  • 会自动渲染成<a>标签,SEO友好
  • 支持active-class高亮,做导航菜单特别香

2. 编程式导航 - 灵活的JS操作

javascript 复制代码
// 基本跳转
this.$router.push('/home')

// 带参数跳转
this.$router.push({ path: '/user', query: { id: '123' } })

// 命名路由跳转
this.$router.push({ name: 'user', params: { username: '我' } })

踩过的坑提醒:

javascript 复制代码
// params传参必须用name,不能用path!
this.$router.push({ 
  name: 'user', 
  params: { userId: '007' } // ✅ 正确
})

this.$router.push({
  path: '/user',
  params: { userId: '007' } // ❌ 无效!
})

二、进阶跳转技巧

1. 替换当前路由(不留下历史记录)

javascript 复制代码
this.$router.replace('/login')
// 相当于把当前路由"覆盖"掉

适用场景

  • 登录后跳转,不让用户点返回又回到登录页
  • 表单分步骤提交,不需要回退到上一步

2. 前进后退控制

javascript 复制代码
// 后退一步
this.$router.go(-1)

// 前进两步
this.$router.go(2)

的实战案例:

javascript 复制代码
// 支付完成后禁止返回
paySuccess() {
  this.$router.replace('/success')
  // 再锁死后退按钮
  window.history.pushState(null, null, document.URL)
}

三、特殊跳转场景处理

1. 带参数跳转的三种姿势

javascript 复制代码
// 方式1:query传参(URL可见)
this.$router.push({
  path: '/search',
  query: { keyword: 'Vue' }  // → /search?keyword=Vue
})

// 方式2:params传参(URL不可见)
this.$router.push({
  name: 'user',
  params: { id: 123 }  // → /user/123(需提前配置动态路由)
})

// 方式3:props解耦(推荐!)
{
  path: '/user/:id',
  name: 'user',
  component: User,
  props: true  // 自动将params转为props
}

2. 跳转前确认拦截

javascript 复制代码
this.$router.push({
  path: '/important',
  query: { confirm: true }
}).catch(err => {
  // 用户取消了导航
  if (err.name === 'NavigationDuplicated') {
    alert('别急,已经在当前页啦!')
  }
})

四、小杨的跳转最佳实践

  1. 简单跳转 :直接用<router-link>,省心省力

  2. 复杂跳转:用编程式导航,灵活控制

  3. 参数传递

    • 需要分享URL用query
    • 敏感信息用params
    • 组件复用推荐props
  4. 异常处理:永远记得catch导航错误

最后送大家一个路由跳转拦截的实用代码:

javascript 复制代码
router.beforeEach((to, from, next) => {
  if (to.path === '/vip' && !我.isVip) {
    next('/pay') // 不是VIP?先去充值!
  } else {
    next()
  }
})

今天的路由跳转小课堂就到这里啦!觉得有用的话,别忘了点个赞~有什么问题欢迎评论区交流,看到都会回复的!

⭐ 写在最后

请大家不吝赐教,在下方评论或者私信我,十分感谢🙏🙏🙏.

✅ 认为我某个部分的设计过于繁琐,有更加简单或者更高逼格的封装方式

✅ 认为我部分代码过于老旧,可以提供新的API或最新语法

✅ 对于文章中部分内容不理解

✅ 解答我文章中一些疑问

✅ 认为某些交互,功能需要优化,发现BUG

✅ 想要添加新功能,对于整体的设计,外观有更好的建议

✅ 一起探讨技术加qq交流群:906392632

最后感谢各位的耐心观看,既然都到这了,点个 👍赞再走吧!

相关推荐
崔庆才丨静觅5 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60616 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了6 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅6 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅7 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅7 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment7 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅7 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊7 小时前
jwt介绍
前端
爱敲代码的小鱼8 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax