
一、什么是前端路由1.1 传统后端路由与前端路由的区别在现代 Web 开发中我们常听到 SPA单页应用这个概念。要理解 Vue 的前端路由首先需要对比传统的后端路由。传统网页交互流程如下当用户点击一个链接时浏览器会向服务器发起请求服务器返回一个新的 HTML 文件浏览器解析并重新渲染整个页面。在这个过程中浏览器地址栏的 URL 也会随之改变反映当前所在的页面。而在 SPA 应用中一切逻辑都在一个 HTML 页面内完成。前端路由是指根据用户访问的 URL动态地决定在页面上展示哪个组件而无需重新加载整个页面。这种机制保证了应用的流畅性和用户体验。1.2 前端路由的作用前端路由主要实现了“改变 URL 不刷新页面”的效果。它的核心价值在于无刷新体验支持“后退”、“前进”和“收藏”功能实现组件的按需加载1.3 Vue Router 简介Vue Router 是 Vue.js 官方提供的路由管理器。它与 Vue.js 核心深度集成让构建单页应用变得轻而易举。Vue Router 支持嵌套、模块化、基于路由的视图等丰富功能。二、Vue 路由的核心工作原理Vue Router 主要提供两种实现模式Hash 模式和 History 模式。2.1 Hash 模式的工作原理Hash 模式是 Vue Router 的默认模式。URL 的格式类似于 http://example.com/#/user。其中的 # 符号以及后面的字符被称为 Hash。Hash 模式的原理非常简单URL 中 # 后面的内容不会被发送到服务器。监听 window.onhashchange 事件。当 URL 中的 Hash 发生变化时触发该事件通过 window.location.hash 获取当前的 Hash 值。根据获取到的 Hash 值在路由配置表中查找对应的组件进行渲染。2.2 History 模式的工作原理History 模式看起来更像是传统的多页应用URL 格式为 http://example.com/user。History 模式利用了 HTML5 History APIpushState 和 replaceState。它移除了 URL 中的 # 符号使用更优雅的路径。然而直接在服务器上部署 History 模式的应用可能会遇到 404 问题因为服务器并不知道 user 这个路由应该返回什么文件。2.3 路由匹配与导航守卫无论 Hash 模式还是 History 模式核心逻辑都是基于 URL 的解析。此外Vue Router 还引入了“导航守卫”的概念允许我们在路由变化前进行拦截例如检查登录状态或执行权限验证。Hash 模式History 模式用户点击链接判断路由模式URL 追加 # 和 hash值触发 hashchange 事件解析 location.hash根据 hash 匹配路由表渲染对应组件到 Router-view调用 history.pushStateURL 改变页面不刷新触发 popstate 事件触发 beforeRouteEnter 守卫三、如何手动实现一个简易 Vue 路由为了深入理解原理我们尝试不使用 Vue Router而是用原生 JavaScript 实现一个支持 Hash 模式的简易路由器。3.1 路由配置与初始化首先我们需要定义一个路由配置数组包含路径、组件名称等信息。const routes [ { path: /, component: Home }, { path: /user, component: User }, { path: /about, component: About } ];3.2 Hash 模式的实现我们通过监听 hashchange 事件来实现路由的跳转和渲染。同时我们需要动态创建 a 标签的点击事件拦截避免页面发生跳转。class SimpleRouter { constructor() { this.routes routes; this.currentPath /; this.init(); } init() { window.addEventListener(hashchange, this.handleRoute.bind(this)); this.handleRoute(); // 初始化加载 } handleRoute() { let hash window.location.hash.slice(1) || /; this.render(hash); } render(path) { const route this.routes.find(r r.path path); if (route) { document.getElementById(app).innerHTML div${route.component}/div; } else { document.getElementById(app).innerHTML h1404 Not Found/h1; } } } // 启动路由 new SimpleRouter();3.3 History 模式的实现与优化History 模式需要使用 HTML5 History API。我们需要动态创建全局的 a 标签并拦截其点击事件。// 支持点击跳转 const createLink () { routes.forEach(route { const link document.createElement(a); link.href # route.path; link.textContent route.path; link.onclick (e) { e.preventDefault(); // 阻止默认跳转 history.pushState({}, , # route.path); }; document.body.appendChild(link); }); };通过上述三个步骤我们完成了从概念理解到手动实现的过程。Vue Router 本质上也是基于这些原理封装而成的理解了这些你就能更好地掌握 Vue 的开发技巧。