Nuxt.js 内置了基于文件系统的路由系统,它是对 Vue Router 的封装和扩展,提供了更简洁的路由定义方式。
路由系统工作原理:
-
约定式路由
- Nuxt.js 会自动扫描
pages目录下的文件结构,根据文件路径生成对应的路由配置 - 无需手动配置
router.js文件,减少了配置复杂度
- Nuxt.js 会自动扫描
-
文件命名规则
- 基础路由:
pages/index.vue对应/路径 - 嵌套路由:
pages/user/profile.vue对应/user/profile路径 - 动态路由:使用下划线前缀,如
pages/user/_id.vue对应/user/:id路径 - 嵌套动态路由:如
pages/user/_id/comments.vue对应/user/:id/comments路径
- 基础路由:
-
路由参数获取
- 在组件中通过
$route.params获取路由参数 - 支持通过
validate方法验证路由参数
- 在组件中通过
-
路由导航
- 使用
<nuxt-link>组件进行声明式导航 - 使用
this.$router.push()进行编程式导航
- 使用
与 Vue Router 的主要区别:
-
路由生成方式
- Vue Router:需要手动配置路由规则
- Nuxt.js:基于文件系统自动生成路由
-
路由文件结构
- Vue Router:通常集中在一个
router.js文件中 - Nuxt.js:分散在
pages目录的文件结构中
- Vue Router:通常集中在一个
-
布局系统
- Vue Router:需要手动配置布局组件
- Nuxt.js:内置布局系统,通过
layouts目录管理
-
中间件支持
- Vue Router:使用路由守卫
- Nuxt.js:提供更强大的中间件系统,支持全局、布局和页面级中间件
-
预加载功能
- Nuxt.js 提供路由预加载功能,提升用户体验
高级路由特性:
-
嵌套路由
- 创建与父组件同名的目录,并在其中添加
_slug.vue等文件
- 创建与父组件同名的目录,并在其中添加
-
动态路由
- 使用
_前缀创建动态路由参数 - 支持通过
validate方法验证参数格式
- 使用
-
路由过渡效果
- 内置支持页面过渡动画
-
路由元信息
- 通过组件的
head方法设置页面标题、描述等元信息
- 通过组件的
最佳实践:
- 合理组织
pages目录结构,保持路由逻辑清晰 - 使用动态路由时,添加参数验证
- 利用中间件处理权限验证等通用逻辑
- 合理使用布局组件,减少代码重复