路由
- Nuxt中已经内置vue-router组件,可直接使用,不需要写任何代码
- Nuxt中不需要自己配置路由,Nuxt会根据pages目录中的文件结构自动生成路由配置
- 通过
<NuxtLink to="/about">跳转到关于页面</NuxtLink>实现路由跳转,pages目录下的文件名即路由名 - 跳转到关于页面`会失败,存疑待修改
(1)路由切换页面
在pages目录下新建如下两个vue文件
- index.vue
- about.vue
实现:
pages/index.vue
<template>
<div class="home">
<h1>首页</h1>
<NuxtLink to="/about">跳转到关于页面</NuxtLink>
</div>
</template>
<script>
export default {
},
};
</script>
复制代码
pages/about.vue
<template>
<div class="about">
<h1>关于页面</h1>
<NuxtLink to="/about">跳转到关于页面</NuxtLink>
</div>
</template>
<script>
export default {
};
</script>
复制代码
(2)路由切换激活类名:
当前路由选中后组件会自带激活类名
- nuxt-link-active 模糊匹配
- nuxt-link-exact-active 精确匹配
实现:
layouts/default.vue
<template>
<div>
<ul>
<li>
<NuxtLink to="/">Home</NuxtLink>
</li>
<li>
<NuxtLink to="/about">About Page</NuxtLink>
</li>
</ul>
<main>
<Nuxt />
</main>
</div>
</template>
<style>
a {
text-decoration: none;
}
//激活样式
a.nuxt-link-active {
font-weight: bold;
}
a.nuxt-link-exact-active {
color: #00c58e;
}
</style>
复制代码
pages/index.vue
<template>
<div>
<h3>Home page</h3>
<Goods/>
</div>
</template>
<script>
export default {
name: 'IndexPage',
layout:'blog'
}
</script>
复制代码
pages/about.vue
<template>
<div>
hhhhhhhhhhhh
</div>
</template>
<script>
export default {
layout:'blog'
}
</script>
<style>
</style>
复制代码
注:Home与 About Page两个页面文件的布局文件需一致才可实现
(3)路径和文件的关系
不需要自己写配置文件,直接和文件名直接对应.
| 文件 | 对应路径 |
|---|---|
| pages/index.vue | / |
| pages/login.vue | /login |
| pages/user/order.vue | /user/order |
| pages/goods/index.vue | /good(省略index.vue) |
注意:在Nuxt中一个文件对应一个路径,如果文件名时pages/index.vue, 那么路径可以省略
(4)路由参数
很多时候我们需要在路由上传参数,路由上的参数有两种
- 路径参数
- 查询参数
实现:
1、路径参数 参考路由 - NuxtJS | Nuxt.js 中文网
用params的方式传参时:
name指的是nuxt生成路由配置后的name,不是指页面的路径,也不是组件内部定义的name属性(即页面文件名称),newsId为传递的参数名称
传递参数:
<nuxt-link :to="{name: 'news', params: { newsId: 3306 }}">params传参</nuxt-link>
复制代码
接收参数:
<p>
{{ $route.params.id }}
</p>
复制代码
用query的方式传参时:
传递参数:
<nuxt-link :to="{path: '/news', query: { newsId: 3306 }}">query传参</nuxt-link>
复制代码
接收参数:
<p>
{{ $route.query.id }}
</p>
复制代码
嵌套路由
实现
- 首先创建一个布局文件layouts/default.vue,显示一级路由,放一个
<Nuxt/>组件, 存放一级路由匹配到的页面 - 再创建一个页面文件 pages/user.vue,页面中放一个
<nuxt-child/>组件,存放二级路由匹配到的页面 - 再创建一个文件夹,作为新目录pages/parent,所有parent路由下的子文件页面放到 parent目录中
总结
- 在布局文件中使用
<Nuxt/>组件占位, 存放一级路由页面,在一级路由页面使用<NuxtChild/>存放二级路由页面 <nuxt-link>组件自带激活类名(路由匹配到时) 模糊匹配类名:nuxt-link-active, 精确匹配类名:nuxt-link-exact-active- 实现页面路由跳转嵌套路由还可实现导航栏功能设计
- 注意分清父路由和子路由以及它们相互传参的关系,又必要可使用全局变量