乐闻世界logo
搜索文章和话题

Nuxt.js 的路由系统是如何工作的?与 Vue Router 有什么不同?

3月6日 23:12

Nuxt.js 内置了基于文件系统的路由系统,它是对 Vue Router 的封装和扩展,提供了更简洁的路由定义方式。

路由系统工作原理:

  1. 约定式路由

    • Nuxt.js 会自动扫描 pages 目录下的文件结构,根据文件路径生成对应的路由配置
    • 无需手动配置 router.js 文件,减少了配置复杂度
  2. 文件命名规则

    • 基础路由:pages/index.vue 对应 / 路径
    • 嵌套路由:pages/user/profile.vue 对应 /user/profile 路径
    • 动态路由:使用下划线前缀,如 pages/user/_id.vue 对应 /user/:id 路径
    • 嵌套动态路由:如 pages/user/_id/comments.vue 对应 /user/:id/comments 路径
  3. 路由参数获取

    • 在组件中通过 $route.params 获取路由参数
    • 支持通过 validate 方法验证路由参数
  4. 路由导航

    • 使用 <nuxt-link> 组件进行声明式导航
    • 使用 this.$router.push() 进行编程式导航

与 Vue Router 的主要区别:

  1. 路由生成方式

    • Vue Router:需要手动配置路由规则
    • Nuxt.js:基于文件系统自动生成路由
  2. 路由文件结构

    • Vue Router:通常集中在一个 router.js 文件中
    • Nuxt.js:分散在 pages 目录的文件结构中
  3. 布局系统

    • Vue Router:需要手动配置布局组件
    • Nuxt.js:内置布局系统,通过 layouts 目录管理
  4. 中间件支持

    • Vue Router:使用路由守卫
    • Nuxt.js:提供更强大的中间件系统,支持全局、布局和页面级中间件
  5. 预加载功能

    • Nuxt.js 提供路由预加载功能,提升用户体验

高级路由特性:

  1. 嵌套路由

    • 创建与父组件同名的目录,并在其中添加 _slug.vue 等文件
  2. 动态路由

    • 使用 _ 前缀创建动态路由参数
    • 支持通过 validate 方法验证参数格式
  3. 路由过渡效果

    • 内置支持页面过渡动画
  4. 路由元信息

    • 通过组件的 head 方法设置页面标题、描述等元信息

最佳实践:

  • 合理组织 pages 目录结构,保持路由逻辑清晰
  • 使用动态路由时,添加参数验证
  • 利用中间件处理权限验证等通用逻辑
  • 合理使用布局组件,减少代码重复
标签:Nuxt.js