第四章:Vue Router

核心目标:掌握单页面应用(SPA)的路由原理,实现复杂的嵌套路由管理,并利用导航守卫构建严密的权限控制体系。


📋 本章核心知识点

知识点 说明 难度
路由原理 History API 与 Hash 模式的差异 ⭐⭐
路由配置 嵌套路由、动态路由、重定向 ⭐⭐
导航守卫 全局、独享与组件级守卫的执行顺序 ⭐⭐⭐
编程式导航 在 JS 中自由穿梭
路由元信息 meta 的高级玩法(权限、标题、动画) ⭐⭐⭐

4.1 SPA 路由:为什么页面不刷新?

4.1.1 传统 MPA vs 现代 SPA

  • MPA (多页面应用):每次点击链接,浏览器都会向服务器请求一个全新的 HTML。
  • SPA (单页面应用):整个应用只有一个 HTML。点击链接时,JavaScript 会拦截请求,仅替换页面中的一部分内容,并同步更新浏览器地址。

4.1.2 路由模式

  1. Web History 模式 (推荐):
    • URL 看起来很像正常的地址 example.com/user/1
    • 注意:部署时需要后端配合配置重定向,否则刷新 404。
  2. Web Hash 模式
    • URL 中包含 # 号,如 example.com/#/user/1
    • 优点:不需要后端配置,兼容性极好。

4.2 导航守卫:路由的"保安"

导航守卫是路由系统中最强大的功能,它允许我们在导航发生前拦截并执行逻辑。

4.2.1 全局前置守卫 (beforeEach)

这是实现 权限校验 的最佳位置。

ts 复制代码
router.beforeEach((to, from) => {
  // 检查目标路由是否需要登录
  if (to.meta.requiresAuth && !isLoggedIn()) {
    return { path: '/login' } // 重定向到登录页
  }
})

4.2.2 完整的导航生命周期

当点击链接到加载组件,Vue Router 执行顺序如下:

  1. 失活组件:onBeforeRouteLeave
  2. 全局前置:beforeEach
  3. 路由独享:beforeEnter
  4. 解析组件:beforeRouteEnter
  5. 全局后置:afterEach

4.3 编程式导航 vs 声明式导航

  • 声明式 :使用 <RouterLink to="/home">。它本质上渲染为一个 <a> 标签,但会被 Vue Router 拦截。
  • 编程式 :使用 router.push('/home')。通常用于逻辑执行后的跳转(如登录成功后转入首页)。

4.4 路由元信息 (Meta)

meta 是一个灵活的对象,可以承载任何自定义数据。

  • requiresAuth: 是否需要登录。
  • title: 页面网页标题。
  • transition: 页面切换的具体动画名称。

4.5 性能优化:组件懒加载

通过动态导入(Dynamic Import),我们可以实现组件的按需加载,大幅减少首屏 JS 的体积。

ts 复制代码
const UserProfile = () => import('./views/UserProfile.vue')

📌 章节实战建议

  1. 参数解耦 :在路由配置中使用 props: true,将 URL 参数直接作为 Props 传给组件,避免组件过度依赖 $route 对象。
  2. 加载反馈 :在全局守卫中配合 NProgress 插件,在路由切换时展示顶部的加载进度条。
  3. 返回策略 :合理使用 router.replace 代替 router.push,防止产生过多的历史记录(如登录成功重定向后,不希望用户点击后退回到登录页)。

🔗 专栏链接Vue 3 全栈开发实战专栏

📦 项目源码资源点击下载项目源码

相关推荐
漂流瓶jz5 小时前
Webpack如何实现万物皆可import?loader的使用/配置/手写实践
前端·javascript·webpack
ZC跨境爬虫5 小时前
跟着 MDN 学CSS day_41:显式轨道、隐式网格与区域命名放置
前端·javascript·css·ui·交互
修己xj6 小时前
告别手动存图!这款叫 Fatkun 的浏览器插件,简直是素材收集神器
前端
袋鼠云数栈7 小时前
从前端到基础设施,ACOS 如何打通企业全链路可观测
运维·前端·人工智能·数据治理·数据智能
AskHarries7 小时前
系统提示词、开发者指令和用户输入的优先级
java·前端·数据库
Moment7 小时前
长上下文会最终杀死 Rag 吗?
前端·javascript·后端
qcx237 小时前
【系统学AI】25 论文导读 ①:两篇改变 AI 的开山之作——Attention Is All You Need & ReAct
前端·人工智能·react.js·transformer
kyriewen8 小时前
大文件上传最全指南:分片、断点续传、秒传,一篇就够了
前端·javascript·面试
我叫黑大帅9 小时前
解决聊天页内部滚轮改为页面滚动问题
javascript·后端·面试
郑洁文9 小时前
基于Python的Web命令执行漏洞自动化检测系统
前端·python·网络安全·自动化