玩转 Vue 3 全家桶
大圣
前百度前端架构师
38321 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
玩转 Vue 3 全家桶
15
15
1.0x
00:00/00:00
登录|注册

37|前端路由原理:vue-router源码剖析

$route
$router
RouterView
RouterLink
使用 app.provide 注册路由对象
使用 computed 创建响应式路由对象
注册全局变量
注册全局组件
install
isReady
onError
afterEach
beforeResolve
beforeEach
forward
back
go
replace
push
addRoute
navigate 函数如何实现路由守卫功能?
维护 currentRoute 实现动态渲染组件
createRouterMatcher 创建路由匹配对象
分析了 vue-router 的执行逻辑
通过 useHistoryStateNavigation 实现路由切换
通过 useHistoryListeners 监听路由变化
handleScroll 设置滚动行为
更新 currentRoute.value
pushWithRedirect 函数实现路由跳转
finalizeNavigation 函数完成导航
navigate 函数执行一系列导航守卫函数
路由切换通过 router-link 或 router 对象的 push 方法实现
addRoute 函数创建 RouteRecordMatcher 对象
createRouterMatcher 创建 RouterMatcher 对象
使用 h 函数返回 ViewComponent 的虚拟 DOM
根据 matchedRoute 计算要渲染的组件
setup 函数返回 render 函数
注册 unmount 方法实现 vue-router 安装
使用 computed 和 reactive 创建响应式路由对象
注册 routerrouter 和route 全局变量
install 方法内部注册 RouterLink 和 RouterView 组件
createRouter 最后创建包含方法的对象
install 方法
返回 router 对象
创建路由配置
思考题
总结
createWebHistory 和 createWebHashHistory
路由跳转
导航守卫
路由更新
RouterView 组件
路由安装
createRouter
Vue Router 源码剖析

该思维导图由 AI 生成,仅供参考

你好,我是大圣。
上一讲我们学习了下一代 Vuex 框架 Pinia 的原理,今天我来带你分析 Vue 生态中另外一个重要的框架 vue-router 的源码。
课程中我们也实现过一个迷你的 router,我们通过监听路由的变化,把路由数据包裹成响应式对象后,一旦路由发生变化,我们就去定义好的路由数据中查询当前路由对应的组件,在 router-view 中渲染即可。今天我们就进入到 vue-router 源码的内部,看一下实际的 vue-router 和我们实现的迷你版本有什么区别。

vue-router 入口分析

vue-router 提供了 createRouter 方法来创建路由配置,我们传入每个路由地址对应的组件后,使用 app.use 在 Vue 中加载 vue-router 插件,并且给 Vue 注册了两个内置组件,router-view 负责渲染当前路由匹配的组件,router-link 负责页面的跳转。
我们先来看下 createRouter 如何实现,完整的代码你可以在GitHub上看到。这个函数比较长,还好我们有 TypeScript,我们先看下 createRouter 的参数。
在下面的代码中,参数 RouterOptions 是规范我们配置的路由对象,主要包含 history、routes 等数据。routes 就是我们需要配置的路由对象,类型是 RouteRecordRaw 组成的数组,并且 RouteRecordRaw 的类型是三个类型的合并。然后返回值的类型 Router 就是包含了 addRoute、push、beforeEnter、install 方法的一个对象,并且维护了 currentRoute 和 options 两个属性
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Vue-router源码深入剖析 本文深入剖析了Vue生态中重要的框架vue-router的源码实现原理。文章首先介绍了createRouter方法的实现,该方法用于创建路由配置,并在Vue中加载vue-router插件,注册了两个内置组件router-view和router-link。接着详细分析了路由对象的安装过程,包括注册全局组件、定义全局变量\$router和\$route,并将路由变成响应式对象。然后,文章介绍了router-link和router-view两个组件的实现方式,以及其内部的逻辑和计算过程。 在源码分析中,文章展示了路由对象的创建、安装过程以及内置组件的实现方式。通过对vue-router源码的剖析,读者可以深入了解其内部实现原理,包括路由更新、路由跳转函数的实现,以及路由监听和状态管理等核心功能。这对于想深入了解Vue前端路由原理的开发者来说,是一份很有价值的技术资料。 总的来说,本文通过对vue-router源码的剖析,深入讲解了其内部实现原理,读者可以通过本文了解到vue-router的核心功能和实现细节,对于想深入了解Vue前端路由原理的开发者来说,本文是一份很有价值的技术资料。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《玩转 Vue 3 全家桶》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • InfoQ_e521a4ce8a54
    navigate 函数主要是执行一个异步队列;核心代码 function runGuardQueue(guards: Lazy<any>[]): Promise<void> { return guards.reduce( (promise, guard) => promise.then(() => guard()), Promise.resolve() ) }
    2022-01-14
    2
  • becky
    navigate应该是按官方文章https://router.vuejs.org/guide/advanced/navigation-guards.html#the-full-navigation-resolution-flow 所写的顺序执行路由守卫
    2023-07-18归属地:浙江
  • Merlin_nil
    大圣老师好,install逻辑中似乎有个小错误,文中「通过 app.provide 给全局注册了 route 和 reactive 包裹后的 reactiveRoute 对象」,应该把route改为router吧?
    2022-04-11
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部