vue-ssr之nuxt.js的路由
一个web
项目是离不开路由系统的,那么我们接下来看看nuxt.js
框架如果实现页面路由。
Nuxt.js
依据 pages
目录结构自动生成 vue-router
模块的路由配置。
要在页面之间使用路由,我们建议使用<nuxt-link>
标签。
<template>
<nuxt-link to="/">首页</nuxt-link>
</template>
基础路由
假设 pages 的目录结构如下:
pages/
--| user/
-----| index.vue
-----| one.vue
--| index.vue
那么,Nuxt.js 自动生成的路由配置如下:
router: {
routes: [
{
name: 'index',
path: '/',
component: 'pages/index.vue'
},
{
name: 'user',
path: '/user',
component: 'pages/user/index.vue'
},
{
name: 'user-one',
path: '/user/one',
component: 'pages/user/one.vue'
}
]
}
动态路由
在 Nuxt.js 里面定义带参数的动态路由,需要创建对应的以下划线作为前缀的 Vue 文件 或 目录。
以下目录结构:
pages/
--| _slug/
-----| comments.vue
-----| index.vue
--| users/
-----| _id.vue
--| index.vue
Nuxt.js 生成对应的路由配置表为:
router: {
routes: [
{
name: 'index',
path: '/',
component: 'pages/index.vue'
},
{
name: 'users-id',
path: '/users/:id?',
component: 'pages/users/_id.vue'
},
{
name: 'slug',
path: '/:slug',
component: 'pages/_slug/index.vue'
},
{
name: 'slug-comments',
path: '/:slug/comments',
component: 'pages/_slug/comments.vue'
}
]
}
PS. generate 命令会忽略动态路由
路由参数校验
Nuxt.js
可以让你在动态路由对应的页面组件中配置一个校验方法用于校验动态路由参数的有效性。
export default {
validate ({ params }) {
// 必须是number类型
return /^\d+$/.test(params.id)
}
}
如果校验方法返回的值不为true
或Promise
中resolve
解析为false
或抛出Error
, Nuxt.js
将自动加载显示 404
错误页面或 500
错误页面。
嵌套路由
你可以通过 vue-router
的子路由创建 Nuxt.js
应用的嵌套路由。
创建内嵌子路由,你需要添加一个 Vue
文件,同时添加一个与该文件同名的目录用来存放子视图组件。
PS. 别忘了在父组件(
.vue
文件) 内增加<nuxt-child/>
用于显示子视图内容。
假设文件结构如:
pages/
--| users/
-----| _id.vue
-----| index.vue
--| users.vue
Nuxt.js 自动生成的路由配置如下:
router: {
routes: [
{
path: '/users',
component: 'pages/users.vue',
children: [
{
path: '',
component: 'pages/users/index.vue',
name: 'users'
},
{
path: ':id',
component: 'pages/users/_id.vue',
name: 'users-id'
}
]
}
]
}
路由扩展
如果你希望扩展Nuxt.js
创建的路由。您可以通过extendRoutes
选项执行此操作。
在nuxt.config.js
添加自定义路由:
export default {
router: {
extendRoutes (routes, resolve) {
routes.push({
name: 'custom',
path: '*',
component: resolve(__dirname, 'pages/404.vue')
})
}
}
}