当前位置:首页 > VUE

vue-router底层实现

2026-02-21 19:37:28VUE

Vue Router 底层实现原理

Vue Router 是 Vue.js 官方的路由管理器,其核心功能包括路由映射、动态路由匹配、路由参数传递、导航守卫等。以下是其底层实现的关键技术点:

路由模式

Vue Router 支持两种路由模式:

  • Hash 模式:通过 window.location.hashhashchange 事件实现。URL 中会带有 # 符号,例如 http://example.com/#/home
    优势是兼容性好,无需服务器配置。
  • History 模式:基于 HTML5 History API(pushStatereplaceStatepopstate 事件)。URL 更简洁,例如 http://example.com/home
    需要服务器支持,避免直接访问子路由时返回 404。

路由映射与匹配

路由配置通过 routes 数组定义,Vue Router 会将其转换为路由映射表。动态路由(如 /user/:id)通过路径解析和正则匹配实现:

const pathToRegexp = require('path-to-regexp');
const regex = pathToRegexp('/user/:id');
const match = regex.exec('/user/123'); // match.params.id === '123'

响应式路由

Vue Router 通过 Vue 的响应式系统实现路由与组件的动态绑定。核心是通过 currentRoute 对象(Vue 响应式数据)存储当前路由信息:

let _route = {}; // 当前路由对象
Object.defineProperty(this, '$route', {
  get() { return _route; },
  set(val) { _route = val; } // 变化时触发视图更新
});

导航守卫

导航守卫通过钩子函数队列实现,包括全局守卫、路由独享守卫和组件内守卫。执行流程如下:

  1. 触发导航(如 router.push)。
  2. 按顺序调用 beforeEachbeforeRouteUpdate 等守卫。
  3. 解析目标路由,确认导航后调用 afterEach

路由跳转

路由跳转的核心方法是 pushreplace,底层调用 History API 或修改 hash

function push(location) {
  if (history.pushState) {
    history.pushState({}, '', location); // History 模式
  } else {
    window.location.hash = location; // Hash 模式
  }
}

组件渲染

<router-view> 是动态组件,根据当前路由的 matched 数组渲染对应组件。通过 Vue 的 h 函数动态生成组件:

vue-router底层实现

render(h) {
  const matched = this.$route.matched[this.depth];
  return matched ? h(matched.components) : null;
}

关键源码模块

  1. Router 类:核心逻辑入口,初始化路由模式、路由映射和导航守卫。
  2. History 基类:抽象 HashHistoryHTML5History 的公共方法。
  3. Matcher:处理路由配置的解析和匹配。
  4. Route 对象:存储当前路由路径、参数、查询等信息。

通过以上机制,Vue Router 实现了与 Vue 深度集成的路由管理功能。

标签: 底层vue
分享给朋友:

相关文章

vue 实现pdf

vue 实现pdf

在Vue中实现PDF功能 在Vue项目中实现PDF功能通常涉及PDF生成、预览或下载。以下是几种常见实现方式: 使用vue-pdf库预览PDF 安装依赖: npm install vue-pdf…

vue翻页实现

vue翻页实现

Vue翻页实现方法 基础分页组件实现 使用v-for和计算属性实现基础分页逻辑: <template> <div> <ul> <li…

vue实现ssr

vue实现ssr

Vue 实现 SSR(服务端渲染) Vue 的服务端渲染(SSR)允许在服务器端生成完整的 HTML 内容,再发送到客户端,提升首屏加载速度和 SEO 友好性。以下是实现 Vue SSR 的关键步骤和…

vue实现导航

vue实现导航

使用 Vue Router 实现导航 Vue Router 是 Vue.js 官方提供的路由管理器,用于构建单页应用(SPA)的导航系统。以下是实现导航的基本步骤。 安装 Vue Router n…

vue工序实现

vue工序实现

Vue 工序实现方法 在Vue中实现工序(或流程)功能,通常涉及状态管理、组件通信和动态渲染。以下是几种常见方法: 使用动态组件 通过Vue的<component :is="currentCo…

vue 实现templateurl

vue 实现templateurl

在 Vue 中,templateUrl 是 Angular 中的一个概念,用于指定外部 HTML 文件作为模板。Vue 本身不直接支持 templateUrl,但可以通过以下方法实现类似功能: 使用…