Nb
Study
.com
🔍 请输入搜索关键字

nuxt 3 动态路由关键点总结

nbstudy 发表于 2024-06-30 17:27:22

Nuxt3 本身是基于文件的路由,即根据pages目录下的文件自动进行路由。

方括号

所谓动态路由,即可以根据$route.params 获取路径中的不同参数,当你把任何文件或文件夹放置于方括号[]中时,将自动生成动态路由。

例如:

复制代码
-| pages/
---| index.vue
---| users-[group]/
-----| [id].vue

对于上述文件结果,在模版文件中可以通过以下方式获取 groupid.

复制代码
//  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 文件