在Vue中,路由是实现单页面应用(SPA)页面跳转与组件切换的核心机制,通过管理URL与组件的映射关系,实现无刷新页面导航。
1. 核心作用
无刷新跳转:通过改变URL路径,动态渲染对应组件,避免传统多页面应用的整页刷新。
组件映射:将URL与具体组件绑定,用户访问特定路径时,自动加载对应组件(如
/home映射 Home 组件)。状态管理:通过路由参数(如
/user/:id)传递数据,实现组件间通信或页面状态关联。
2. 核心库:Vue Router
Vue 官方路由管理器,需单独安装(npm install vue-router)。核心使用步骤:
定义路由表:通过
routes配置数组,声明路径与组件的映射(如{ path: '/home', component: Home })。创建路由实例:
new VueRouter({ routes }),可配置路由模式(hash/history)、base路径等。挂载到Vue实例:在根实例中注入路由,
new Vue({ router }),使全局可访问$router(路由实例)和$route(当前路由信息)。
3. 路由模式(高频考点)
Vue Router 支持三种模式,通过 mode 配置:
hash模式(默认):URL带
#(如http://abc.com/#/home),通过hashchange事件监听路径变化,兼容性好(支持所有浏览器),但URL不美观。history模式:URL无
#(如http://abc.com/home),基于HTML5 History API(pushState/replaceState),需服务端配置(刷新页面时,服务端需返回同一HTML,避免404)。abstract模式:用于非浏览器环境(如Node.js、Weex),不依赖URL,通过内存管理路由历史。
4. 核心概念
(1)动态路由
路径带参数(如 /user/:id),通过 $route.params.id 获取参数,适用于详情页等场景(如用户ID、订单号动态传递)。
(2)嵌套路由
通过 children 配置子路由,实现组件嵌套(如 /home 下有 /home/news 和 /home/message),需在父组件中用 <router-view> 渲染子组件。
(3)命名路由
通过 name 标识路由(如 { path: '/user/:id', name: 'user', component: User }),跳转时用 name 代替路径,简化代码(如 <router-link :to="{ name: 'user', params: { id: 1 } }">)。
(4)编程式导航 vs 声明式导航
声明式:用
<router-link to="/home">跳转,类似<a>标签,语义化强。编程式:通过
this.$router.push('/home')(添加历史记录)、this.$router.replace('/home')(替换当前记录,不新增历史)、this.$router.go(-1)(后退)实现跳转,适用于逻辑控制(如表单提交后跳转)。
5. 路由守卫(权限控制核心)
通过守卫在路由跳转前后进行拦截,常用于权限校验、登录验证、数据预加载。分为三类:
全局守卫:
beforeEach(全局前置守卫,登录验证常用)、beforeResolve(全局解析守卫)、afterEach(全局后置守卫,无next,常用于修改页面标题)。路由独享守卫:在路由配置中通过
beforeEnter定义,仅对当前路由生效(如{ path: '/admin', component: Admin, beforeEnter: (to, from, next) => { ... } })。组件内守卫:在组件内通过
beforeRouteEnter(进入路由前,不能访问组件实例this,需通过vm回调)、beforeRouteUpdate(路由复用组件时,如/user/1→/user/2)、beforeRouteLeave(离开组件前,如表单未保存提示)定义。
6. 路由懒加载(性能优化)
结合Vue异步组件和Webpack代码分割,实现按需加载组件,减少首屏资源体积。通过动态 import() 语法(如 component: () => import('./Home.vue')),Webpack会将组件单独打包,访问对应路由时才加载。
7. 关键区别:$router vs $route
$router:路由实例对象,包含跳转方法(push/replace/go)、全局配置等,是全局唯一的。$route:当前路由信息对象,包含路径(path)、参数(params)、查询(query)、哈希(hash)等,每个组件实例独立。
总结
Vue Router是SPA的“神经中枢”,通过URL与组件的映射、路由守卫的权限控制、懒加载的性能优化,实现高效、友好的单页面导航。面试中需重点突出路由模式区别、守卫应用场景、懒加载原理,体现对路由从基础到进阶的理解。