当前位置:首页 > VUE

vue路由实现和原理

2026-01-22 14:50:25VUE

Vue 路由的实现方式

基于 vue-router 的配置 安装 vue-router 后,通过 Vue.use() 注册插件。定义路由表(routes)并创建 router 实例,注入到 Vue 根实例中。

import Vue from 'vue';
import VueRouter from 'vue-router';
import Home from './views/Home.vue';

Vue.use(VueRouter);

const routes = [
  { path: '/', component: Home },
  { path: '/about', component: () => import('./views/About.vue') }
];

const router = new VueRouter({
  routes
});

new Vue({
  router,
  render: h => h(App)
}).$mount('#app');

动态路由与参数传递 通过 : 定义动态路径参数,组件内通过 this.$route.params 访问。

{ path: '/user/:id', component: User }

嵌套路由 使用 children 属性定义嵌套路由结构,父组件需包含 <router-view>

{
  path: '/parent',
  component: Parent,
  children: [
    { path: 'child', component: Child }
  ]
}

Vue 路由的核心原理

Hash 模式与 History 模式

vue路由实现和原理

  • Hash 模式:利用 URL 的 # 部分(如 http://example.com/#/path),通过监听 hashchange 事件实现路由切换。兼容性强,无需服务器配置。
  • History 模式:基于 HTML5 History API(pushState/replaceState),URL 无 #(如 http://example.com/path)。需服务器支持,避免直接访问子路径时 404。

路由切换流程

  1. 用户点击 <router-link> 或调用 this.$router.push()
  2. 路由实例根据路径匹配路由表,获取目标组件。
  3. 触发导航守卫(如 beforeEach),确认后更新视图。
  4. 渲染新组件到 <router-view>,同时更新 URL。

响应式实现 Vue Router 通过将当前路由信息($route)定义为响应式对象,当路径变化时自动触发组件更新。依赖 Vue 的响应式系统,确保视图与 URL 同步。

导航守卫的应用

全局守卫

vue路由实现和原理

  • router.beforeEach:在导航前执行,可用于权限验证。
  • router.afterEach:导航完成后执行,适合日志记录。
router.beforeEach((to, from, next) => {
  if (to.meta.requiresAuth && !isAuthenticated) next('/login');
  else next();
});

组件内守卫

  • beforeRouteEnter:组件渲染前调用。
  • beforeRouteUpdate:当前路由改变但组件复用时调用。
  • beforeRouteLeave:离开路由前调用,可阻止导航。
export default {
  beforeRouteLeave(to, from, next) {
    if (unsavedChanges) {
      if (confirm('Leave without saving?')) next();
    } else next();
  }
};

路由懒加载优化

通过动态导入(import())实现代码分割,减少初始加载体积。

const About = () => import('./views/About.vue');

结合 Webpack 的魔法注释可命名 chunk:

const About = () => import(/* webpackChunkName: "about" */ './views/About.vue');

标签: 路由原理
分享给朋友:

相关文章

vue实现放大镜原理

vue实现放大镜原理

Vue 实现放大镜效果 放大镜效果常见于电商网站的商品展示,通过鼠标悬停或移动实现局部放大。以下是基于 Vue 的实现方法: 核心原理 布局结构:主容器包含小图区域和放大镜区域。 事件监听:…

css动画制作原理

css动画制作原理

CSS动画制作原理 CSS动画通过关键帧(@keyframes)和动画属性(如animation-name、animation-duration)实现动态效果。核心原理分为两部分:定义动画关键帧和绑定…

vue路由实现思路

vue路由实现思路

Vue 路由实现思路 Vue 路由的核心是通过 Vue Router 库实现单页应用(SPA)的页面切换,避免整页刷新。以下是关键实现思路: 安装与引入 Vue Router 通过 npm 或 ya…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

php 路由实现的

php 路由实现的

PHP 路由实现方法 基于原生 PHP 实现路由 创建一个简单的路由解析器,通过解析 URL 路径来调用对应的控制器或函数。 // 定义路由表 $routes = [ '/' => '…

Vue实现原理详解

Vue实现原理详解

Vue 实现原理核心解析 Vue.js 的核心实现基于响应式系统、虚拟 DOM 和组件化设计。以下是关键原理的分解: 响应式系统 通过 Object.defineProperty(Vue 2)或 P…