上一篇我们讲到如何利用nuxt3的约定路由,实现页面的基本路由功能。但是对于复杂的页面而言,基本的路由是远远不够的。接下来我们来看看nuxt的复杂路由。
嵌套路由
我们知vue-router中要想使用嵌套路由就提供一个子页面的容器,这个容器就是<RouterView/>
,而nuxt3对其重新定义了一个语义别名<NuxtChild/>
来替代<RouterView/>
,用法都是一样的。
在pages下新建一个文件夹parent
和一个与文件名同名的.vue
文件,在parent
文件夹内新建child1.vue
、child2.vue
文件作为子页面。
- 目录结构如下:
pages/
| ——parent/
| | ——child1.vue
| | ——child2.vue
| ——parent.vue
- 新增两个子页面
child1.vue
和child2.vue
<template>
<h1>这是子组件页面1</h1>
</template>
<template>
<h1>这是子组件页面2</h1>
</template>
- 给父页面
parent.vue
加一个<NuxtChild/>
用于显示子页面,并加上两个导航链接<NuxtLink/>
用于切换两个子页面
<template>
<div>
<NuxtLink to="/parent/child1">child1</NuxtLink> |
<NuxtLink to="/parent/child2">child2</NuxtLink>
<h1>这里是 父组件页面</h1>
<NuxtChild />
</div>
</template>
- 在
app.vue
添加一个导航链接到parent.vue
<template>
<div>
<NuxtLink to="/test">test</NuxtLink> |
<NuxtLink to="/">根</NuxtLink>
<!-- 新增 -->
<NuxtLink to="/parent">嵌套路由页面</NuxtLink>
<NuxtPage></NuxtPage>
</div>
</template>
- 运行如下:
动态路由
- 对于动态路由,在nuxt3中你只需要将动态参数写在
[]
中即可,而这个[]
应该写文件夹名或者.vue
文件名中。
文件名 | 访问路径 | 参数 |
---|---|---|
/parent-[user].vue | /parent-小明 | {user:'小明'} |
/parent-[user]/[id].vue | /parent-小明/1 | {user:'小明',id:1} |
- 接下来我哦们在嵌套路由的基础上进行改造,将parent文件夹名和parent.vue文件名改成parent-[user]。对应的目录结构如下:
pages/
| ——parent-[user]/
| | ——[id].vue
| ——parent-[user].vue
[id].vue
页面中参数的获取(通过$router.params
)
<template>
<div>user: {{ $route.params.user }} id: {{ $route.params.id }}</div>
</template>
- 访问路径
/parent-小明/12
即可访问[id].vue
文件
结语
关于动态路由和嵌套路由到这里就结束了,我相信大家应该知道怎么去开发路由页了,下一篇我们将一起探讨怎样在nuxt3中搭建页面布局。