Vue Router就像网页应用的交通指挥官,让用户在不同"页面"间无缝切换,无需刷新整个页面。这个官方路由库用三个关键词概括就是:智能导航、组件管理、状态同步。相比传统多页应用,它能让首屏加载速度提升3倍,用户停留时长增加60%。
路由模式双雄
- Hash模式:地址栏带#的"隐形安全绳",兼容IE9且无需服务器配置(例:http://example.com/#/home)
- History模式:干净的URL如http://example.com/about,需要服务器配合重定向规则
const router = new VueRouter({
mode: 'history', // 切换模式
routes: [...]
})
组件动态拼图
通过<router-view>组件实现"哪里需要变哪里"的魔法:
<!-- 父组件 -->
<template>
<div>
<router-view></router-view> <!-- 主页内容区 -->
<router-view name="sidebar"></router-view> <!-- 侧边栏 -->
</div>
3. 导航守卫系统
三类"关卡守卫"保障路由安全:
- 全局守卫:beforeEach做权限验证(如检查用户登录)
- 路由独享守卫:特定路由的VIP通道检查
- 组件守卫:beforeRouteLeave防止误操作丢失数据
六大实战技巧
1. 动态路由匹配
实现用户主页自动识别:
{ path: '/user/:id', component: User }
在组件中通过this.$route.params.id获取用户ID
2. 路由懒加载
用箭头函数实现按需加载,首屏体积减少40%:
const User = () => import('./views/User.vue')
3. 嵌套路由配置
搭建管理后台的经典结构:
{
path: '/admin',
component: AdminLayout,
children: [
{ path: 'dashboard', component: Dashboard },
{ path: 'users', component: UserList }
]
}
4. 编程式导航
比<router-link>更灵活的操作方式:
// 跳转并传递参数
this.$router.push({
name: 'order',
params: { orderId: 123 }
})
5. 滚动行为控制
让页面滚动位置"记忆重现":
scrollBehavior(to, from, savedPosition) {
return savedPosition || { x: 0, y: 0 }
}
6. 路由元信息
给路由打标签实现权限管理:
{
path: '/vip',
meta: { requiresAuth: true }
}
高频面试题精讲
1. Hash和History模式的区别?
Hash模式通过#后的路径变化触发路由,无需服务端支持;History模式利用HTML5 API实现干净URL,需配置服务器重定向规则。
2. 导航守卫执行顺序?
全局前置守卫 → 路由独享守卫 → 组件内守卫 → 全局解析守卫 → 全局后置钩子
3. 如何实现路由懒加载?
使用动态导入语法() => import('./Component.vue'),配合Webpack代码分割功能
4. Vue Router如何与Vuex配合?
可在导航守卫中读取Vuex状态,或通过watch监听路由变化更新store
5. 动态路由参数变化组件不更新?
需用watch监听$route对象,或使用beforeRouteUpdate守卫
6. 路由传参方式对比
- params:参数在URL不可见(刷新丢失)
- query:参数显示在URL(适合分页)
- props:解耦组件与路由
性能优化秘籍
- 路由分级加载:核心功能同步加载,次要功能异步加载
- 缓存高频页面:使用keep-alive包裹<router-view>
- 预加载策略:用webpackPrefetch预加载可能访问的路由
- 精简路由配置:避免多层嵌套路由超过3级
掌握Vue Router就像获得打造丝滑单页应用的"通关文牒",从简单的页面跳转到复杂的权限管理,它都能游刃有余。建议从改造现有项目的导航菜单开始实践,你会发现用户点击"前进""后退"时的笑容更灿烂了!