vue-router实现分析
vue-router 的核心实现原理
vue-router 的实现主要基于 Vue.js 的插件系统和响应式原理。通过 Vue.mixin 向所有组件注入路由相关的属性和方法,利用 Vue 的响应式系统实现路由与视图的同步更新。
路由模式实现
Hash 模式通过监听 window.hashchange 事件实现路由变化。URL 中 # 后面的部分作为路由路径,改变时不会触发页面刷新。
History 模式利用 HTML5 History API 的 pushState 和 replaceState 方法。需要服务器配置支持,避免直接访问子路由时返回 404。
Abstract 模式用于非浏览器环境,如 Node.js 或移动端原生应用。路由信息保存在内存中,不依赖浏览器 API。
路由映射与匹配
路由配置通过 path-to-regexp 库转换为正则表达式。匹配时按照路由定义的顺序进行,支持动态路由参数和通配符。
嵌套路由通过路由配置的 children 属性实现。匹配时会递归检查子路由,父组件需要通过 <router-view> 渲染子路由对应的组件。

导航守卫机制
全局守卫通过 router.beforeEach 等方法注册。路由独享守卫在路由配置中定义,组件内守卫通过组件选项配置。
导航解析流程按照从外到内的顺序执行守卫。完整的导航解析流程包括触发导航、调用守卫、确认导航和更新视图。
视图渲染过程
<router-view> 组件是一个函数式组件,根据当前路由匹配结果渲染对应的组件。支持命名视图和多视图布局。

<router-link> 组件生成带正确 href 的 <a> 标签。支持 active-class 等特性,处理点击事件时调用 router.push 或 router.replace。
响应式更新机制
当前路由信息通过 Vue 的响应式系统存储。路由变化时触发相关组件的重新渲染,保证视图与路由状态同步。
路由对象中的 matched 数组包含当前路由匹配的所有路由记录。通过深度监听确保嵌套路由变化时能正确更新视图。
滚动行为控制
支持通过 scrollBehavior 配置滚动行为。可以保存和恢复滚动位置,或在导航时滚动到特定位置。
在支持 History API 的浏览器中,利用 history.state 保存滚动位置信息。页面刷新或重新加载时恢复之前的滚动位置。






