Vue路由
目录
路由基础
SPA与路由
1 | ┌─────────────────────────────────────────────────────────────┐ |
Vue Router引入
1 | // Vue2 |
基本使用
1 | // router/index.js |
1 | // Vue3 |
1 | <!-- App.vue --> |
路由配置
路由模式
1 | // Vue3 |
路由懒加载
1 | // Vue3 |
嵌套路由
1 | const routes = [ |
1 | <!-- UserLayout.vue --> |
命名路由
1 | const routes = [ |
1 | <!-- 跳转 --> |
路由跳转
router-link
1 | <!-- 基本跳转 --> |
replace模式
1 | <!-- replace模式 - 不留下历史记录 --> |
append模式
1 | <!-- 在当前路径后追加 --> |
路由传参
query参数
1 | <!-- 跳转时传递query参数 --> |
1 | // 获取query参数 |
params参数
1 | // 定义路由时使用占位符 |
props解耦
1 | // 路由配置中开启props |
1 | <!-- User.vue --> |
路由守卫
全局守卫
1 | // Vue3 |
路由独享守卫
1 | const routes = [ |
组件内守卫
1 | // Vue3 - 使用onBeforeRouteUpdate |
1 | // Vue2 - 组件内守卫 |
守卫完整流程
1 | ┌──────────────────────────────────────────────────────────────┐ |
路由元信息
meta定义
1 | const routes = [ |
访问meta
1 | // 全局前置守卫中访问 |
编程式导航
push和replace
1 | // 字符串路径 |
go
1 | // 前进或后退指定步数 |
back
1 | // 后退一步 |
forward
1 | // 前进一步 |
promise支持
1 | // Vue3 - push返回promise |
路由进阶
滚动行为
1 | // Vue3 |
路由懒加载失败处理
1 | const routes = [ |
动态路由
1 | // 添加路由 |
获取当前路由信息
1 | // Vue3 Composition API |
History API
1 | // Vue2 History模式 |
导航故障处理
1 | // Vue3 |
Vue Router 4新特性
与Vue Router 3对比
| 特性 | Vue Router 3 | Vue Router 4 |
|---|---|---|
| Vue版本 | Vue2 | Vue3 |
| 安装方式 | Vue.use() | app.use() |
| 创建方式 | new VueRouter() | createRouter() |
| History | new VueRouter({ mode }) | createWebHistory() |
| 通配符 | path: ‘*’ | path: ‘/:pathMatch(.*)’ |
| 导航守卫 | next() | 返回true/false/promise |
| 路由懒加载 | component: resolve => | component: () => import() |
常用迁移
1 | // Vue3 - 动态路由参数变化 |
1 | // Vue3 - router.currentRoute |
总结
路由核心概念
| 概念 | 说明 |
|---|---|
| router-link | 声明式导航 |
| router-view | 路由出口 |
| $router | 路由实例,导航方法 |
| $route | 当前路由信息 |
| 导航守卫 | 控制路由访问权限 |
| 路由懒加载 | 优化首屏加载 |
路由守卫应用场景
| 守卫 | 场景 |
|---|---|
| beforeEach | 登录验证、权限检查 |
| beforeEnter | 路由特定检查 |
| beforeRouteEnter | 获取数据、实例访问 |
| beforeRouteUpdate | 复用组件的参数变化 |
| beforeRouteLeave | 确认离开、清理工作 |
| afterEach | 页面标题、统计 |
相关链接
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Louyp!
评论
