Vue Router 路由管理

中等 🟡Vue 生态
4 个标签
预计阅读时间:5 分钟
VueRouter路由SPA

Vue Router 路由管理

Vue Router 是 Vue 官方的路由管理器,用于构建单页应用(SPA)的导航系统。

基本配置

安装:

npm install vue-router@4(Vue 3)
npm install vue-router@3(Vue 2)

创建路由实例:

createRouter()(Vue 3)
new VueRouter()(Vue 2)
配置 routes 数组

挂载路由:

Vue 3:app.use(router):Vue 3使用app.use()方法注册插件和路由,router是Vue Router 4的实例,通过app.use(router)将路由实例挂载到Vue应用上,Vue Router 4是专门为Vue 3设计的路由库,提供了更好的TypeScript支持、组合式API支持、路由守卫改进等特性
Vue 2:new Vue({ router }):Vue 2在创建根实例时将router作为选项传入,router是Vue Router 3的实例,Vue Router 3是Vue 2官方路由库,支持动态路由、嵌套路由、路由守卫等功能,是Vue 2项目路由管理的标准选择

基本路由配置:

javascriptCode
const routes = [
  {
    path: '/',
    component: Home
  },
  {
    path: '/about',
    component: About
  }
];

路由模式

hash 模式:

URL 中包含 #:Vue Router默认使用Hash模式,URL中包含#符号如example.com/#/home,这种模式下路由变化不会触发页面刷新,兼容性更好不需要服务器配置,Hash模式利用window.location.hash进行路由管理,是Vue Router的默认模式
兼容性好
不需要服务器配置

history 模式:

更美观的 URL
需要服务器配置(404 重定向)
依赖 HTML5 History API

abstract 模式:

无浏览器环境下使用
如 Node.js 环境

路由导航

声明式导航:

组件
to 属性指定目标路由
active-class 高亮当前路由
exact-active-class 精确匹配高亮

编程式导航:

router.push():导航到新位置
router.replace():替换当前位置
router.go():前进或后退
router.back():后退
router.forward():前进

导航守卫:

全局前置守卫:router.beforeEach()
全局解析守卫:router.beforeResolve()
全局后置守卫:router.afterEach()
路由独享守卫:beforeEnter
组件内守卫:beforeRouteEnter、beforeRouteUpdate、beforeRouteLeave

路由参数

动态路由:

path: '/user/:id'
this.$route.params.id(Vue 2)
useRoute().params.id(Vue 3)

查询参数:

path: '/search?keyword=vue'
this.$route.query.keyword(Vue 2)
useRoute().query.keyword(Vue 3)

路由元信息:

meta 字段
存储路由相关信息
如权限、标题等

嵌套路由

配置:

children 数组
相对路径
多级嵌套

示例:

javascriptCode
{
  path: '/user',
  component: User,
  children: [
    {
      path: 'profile',
      component: UserProfile
    },
    {
      path: 'settings',
      component: UserSettings
    }
  ]
}

路由懒加载

动态导入:

() => import('./views/Home.vue')
减少初始打包体积
按需加载组件

Webpack 魔法注释:

/ webpackChunkName: "home" /
自定义 chunk 名称
更好的代码分割

预加载:

webpackPrefetch: true
浏览器空闲时预加载
提升用户体验

路由守卫应用

权限控制:

检查用户登录状态
验证权限
重定向未授权用户

页面标题:

基于路由元信息设置标题
全局后置守卫
动态标题

数据预加载:

导航前获取数据
避免白屏
提升用户体验

最佳实践

使用路由懒加载
合理使用导航守卫
配置 404 页面
处理路由错误
测试路由功能
性能优化策略