nuxt 3 动态路由关键点总结
Nuxt3 本身是基于文件的路由,即根据pages目录下的文件自动进行路由。
方括号
所谓动态路由,即可以根据$route.params
获取路径中的不同参数,当你把任何文件或文件夹放置于方括号[]
中时,将自动生成动态路由。
例如:
-| pages/
---| index.vue
---| users-[group]/
-----| [id].vue
对于上述文件结果,在模版文件中可以通过以下方式获取 group
和 id
.
// pages/users-[group]/[id].vue
<template>
<p>{{ $route.params.group }} - {{ $route.params.id }}</p>
</template>
双方括号
如果你希望参数是可选的,可以使用双方括号
。
~/pages/[[slug]]/index.vue
or ~/pages/[[slug]].vue
这两种情形,都会匹配 /
and /test
.
上述规则务必要好好理解。
同时,目录下的 index.vue
, 默认是匹配该目录,例如~/pages/course/index.vue
会匹配 /course
路由。
捕获所有路由
如果你希望捕获所有路由,可以将文件命名为[...slug].vue
样式。
例如,对 pages/course/[...slug].vue
会同时匹配 /course/list
或 /course/list/123
路由, 而且可以通过{{ $route.params.slug }}
获取到相关参数。
路由优先级
命名路由的优先级会高于动态路由。
例如:
对于 /foo/hello
路由, ~/pages/foo.vue
会优先于 ~/pages/foo/[slug].vue
.
而 ~/pages/foo/index.vue
and ~/pages/foo/[slug].vue
会分别匹配 /foo
和 /foo/hello
.
实战
如果我们想通过/course
展示课程列表,通过/course/nuxt
或 /course/golang
动态展示具体的课程,该如何设计路由呢?
❎ 错误的方式
-| pages/
---| course.vue
---| course/
-----| [name].vue
因为,上述 /course/nuxt
会展示和 /course
一样的内容,即实际生成的是嵌套路由。
✅ 正确的方式
-| pages/
---| course/
-----| index.vue
-----| [name].vue
因为,index.vue
为命名路由,优先级较高,因此 /course
会匹配 pages/course/index.vue
文件。
而, /course/nuxt
为匹配 pages/course/[name].vue
文件