当前位置:首页 > VUE

vue rooter 实现原理

2026-02-10 19:12:39VUE

Vue Router 实现原理

Vue Router 是 Vue.js 官方提供的路由管理器,其核心原理基于前端路由技术,通过监听 URL 变化动态渲染组件。

路由模式

Vue Router 支持两种路由模式:

  • Hash 模式:利用 URL 的 hash(#)部分实现路由切换,不会触发页面刷新。
    示例 URL:http://example.com/#/home
    原理:通过 window.location.hashhashchange 事件监听变化。

  • History 模式:基于 HTML5 History API(pushState/replaceState),URL 更简洁。
    示例 URL:http://example.com/home
    原理:通过 history.pushState() 修改 URL 并监听 popstate 事件。

    vue rooter 实现原理

核心实现步骤

  1. 路由注册
    通过 routes 配置定义路径与组件的映射关系,生成路由表。

    const routes = [
      { path: '/home', component: Home },
      { path: '/about', component: About }
    ];
  2. 路由实例化
    创建 Vue Router 实例时,会根据模式初始化路由监听机制。

    vue rooter 实现原理

    const router = new VueRouter({
      mode: 'history', // 或 'hash'
      routes
    });
  3. 路由匹配
    当 URL 变化时,通过 path-to-regexp 等库匹配路由表,找到对应的组件。

  4. 组件渲染
    将匹配的组件渲染到 <router-view> 占位符中,通过 Vue 的响应式机制更新视图。

  5. 导航守卫
    提供全局或路由级的钩子函数(如 beforeEach),控制导航流程。

    router.beforeEach((to, from, next) => {
      // 权限校验等逻辑
      next();
    });

动态路由与懒加载

  • 动态路由:通过 :id 形式定义参数,通过 $route.params 访问。
    { path: '/user/:id', component: User }
  • 懒加载:使用动态导入提升性能。
    { path: '/about', component: () => import('./About.vue') }

响应式原理

Vue Router 通过将当前路由信息注入 Vue 实例的 $route 属性,利用 Vue 的响应式系统自动更新视图。当 URL 变化时,$route 会触发依赖收集的组件重新渲染。

标签: 原理vue
分享给朋友:

相关文章

vue实现全局遮罩层

vue实现全局遮罩层

实现全局遮罩层的方法 在Vue中实现全局遮罩层可以通过多种方式完成,以下是几种常见的实现方法: 使用Vue组件创建遮罩层 创建一个遮罩层组件,通过全局注册或动态挂载的方式实现全局调用。以下是一个简单…

vue实现通讯

vue实现通讯

Vue 组件通讯方法 父子组件通讯 父组件向子组件传递数据通过 props,子组件向父组件传递数据通过 $emit 事件。 父组件模板: <child-component :message=…

vue日历实现

vue日历实现

实现基础日历布局 使用Vue的模板语法构建日历的基本HTML结构。一个典型的日历包含星期标题和日期格子,可以通过v-for循环生成。月份切换功能通过计算属性动态更新日期数组。 <templat…

vue逻辑实现怎么实现

vue逻辑实现怎么实现

Vue 逻辑实现方法 Vue 的逻辑实现主要通过组件化、响应式数据、计算属性、方法、生命周期钩子等方式完成。以下是一些核心实现方法: 数据驱动与响应式 在 Vue 中,通过 data 选项定义响应式…

用vue实现滚动

用vue实现滚动

实现滚动的基本方法 在Vue中实现滚动可以通过多种方式完成,包括使用原生JavaScript、Vue指令或第三方库。以下是几种常见的方法: 使用ref和原生JavaScript 在模板中定义一个可滚…

vue 实现多选框

vue 实现多选框

Vue 实现多选框的方法 使用 v-model 绑定数组 在 Vue 中,可以通过 v-model 绑定一个数组来实现多选框的选择功能。每个复选框的 value 属性会被添加到数组中,取消勾选时则从数…