资源

vue ssr
nuxt.js 官网
Nuxt.js 官方文档-中文
nuxt 中文
nuxt 介绍

安装

  1. npx create-nuxt-app <项目名>
  2. yarn create nuxt-app <project-name>

相关基础配置

Nuxt 使用 proxy 代理

Nuxt 使用 axios

nuxt 使用vuex

nuxt 使用中间件

nuxt 多环境配置

打包去除console

插件

Nuxt 自定义插件

svg

参考:https://blog.csdn.net/qq_26373925/article/details/108405038

nuxt 页面相关

下图展示了Nuxt.js 如何为指定的路由配置数据和视图
image.png

路由

所有生成的路由可以在 **.nuxt/router.js** 中查看

1. 路由

pages目录下创建 .vue 文件,将自动生成对应的路由配置

目录结构:

  1. pages/
  2. --| index/
  3. --| list/

对应的路由配置:

  1. {
  2. path: "/list",
  3. component: _32bf9a90,
  4. name: "list"
  5. }, {
  6. path: "/",
  7. component: _4c976ce8,
  8. name: "index"
  9. }

2. 动态路由

以下划线作为前缀 的 .vue 文件 或 目录会被定义为动态路由

目录结构:

  1. pages/
  2. --| detail/
  3. ----| _id.vue

会生成如下路由配置:

  1. {
  2. path: "/detail/:id?",
  3. component: _9c9d895e,
  4. name: "detail-id"
  5. }

如果detail/里面不存在index.vue,:id将被作为可选参数

通过 /detail/1 访问

  1. <nuxt-link :to="`/detail/${id}`"></nuxt-link>

3. 嵌套路由

创建内嵌子路由,你需要添加一个 .vue 文件,同时添加一个 与该文件同名 的目录用来存放子视图组件。

目录结构如下:

  1. pages/
  2. --| detail/
  3. ----| _id.vue
  4. --| detail.vue

生成的路由配置如下:

  1. {
  2. path: '/detail',
  3. component: 'pages/detail.vue',
  4. children: [
  5. {path: ':id?', name: "detail-id"}
  6. ]
  7. }

4. 配置路由

要扩展Nuxt.js创建的路由,可以通过 router.extendRoutes 选项配置。例如添加自定义路由:

nuxt.config.js 中配置路由

  1. export default {
  2. router: {
  3. extendRoutes (routes, resolve) {
  4. // 添加一个 文件名为 pages/custom.vue 但是路由为 /foo
  5. routes.push({
  6. name: "foo",
  7. path: "/foo",
  8. component: resolve(__dirname, "pages/custom.vue")
  9. });
  10. },
  11. // middleware: ['auth'] // 所有文件都添加中间件
  12. }
  13. }

组件

Nuxt 组件

  • 类似 vue-cli 的 <router-view />

    1. <template>
    2. <div>
    3. <div>My nav bar</div>
    4. <Nuxt />
    5. <div>My footer</div>
    6. </div>
    7. </template>

    NuxtLink 组件

  • 类似 vue-cli 的 <router-link to="/"></router-link>

  • 别名:n-link,NLink,NuxtLink

用法:

  1. <nav>
  2. <nuxt-link to="/">首⻚</nuxt-link>
  3. <NLink to="/admin" no-prefetch>管理</NLink>
  4. <n-link to="/cart" no-prefetch>购物⻋</n-link>
  5. </nav>

由于nuxt默认在浏览器不忙时,自动预先加载链接资源,如果链接处于脱机状态或只有2G,则跳过预加载

  • no-prefetch 去除链接页面预加载

NuxtChild 组件

在嵌套路由里,要显示子路由内容,必须使用 <nuxt-child />

  • 类似 vue-cli 的 <router-view />
    1. <template>
    2. <div>
    3. <h1>I am the parent view</h1>
    4. <NuxtChild :foobar="123" />
    5. </div>
    6. </template>

    layout 指定当前⻚面使用的布局

    layouts 根目录下的布局文件

layouts 下创建的 .vue 文件,为页面布局,默认是 defualt.vue 布局。也可以指定自定义布局

默认布局

layouts/default.vue

  1. <template>
  2. <nuxt/>
  3. </template>

自定义布局

layouts/custom.vue

  1. <template>
  2. <div>
  3. <header></header>
  4. <nuxt />
  5. <footer></footer>
  6. </div>
  7. </template>

pages/login.vue 使用自定义布局:

  1. export default {
  2. layout: 'custom' // custom 自定义布局的文件名
  3. }

公共错误⻚面

创建layouts/error.vue

  1. <template>
  2. <div class="container">
  3. <h1 v-if="error.statusCode === 404">⻚面不存在</h1>
  4. <h1 v-else>应用发生错误异常</h1>
  5. <p>{{error}}</p>
  6. <nuxt-link to="/">首 ⻚</nuxt-link>
  7. </div>
  8. </template>
  9. <script>
  10. export default {
  11. props: ['error'], //
  12. }
  13. </script>

head 配置当前⻚面的 Meta 标签

⻚面组件就是 Vue 组件,只不过 Nuxt.js 为这些组件添加了一些特殊的配置项,如向页面添加标题和meta等。

index.vue

  1. export default {
  2. head () {
  3. return {
  4. title: "首页",
  5. // vue-meta利用hid确定要更新meta
  6. meta: [
  7. { name: "keywords", content: "关键字" },
  8. { name: "description", hid: "description", content: "描述内容" }
  9. ],
  10. link: [{ rel: "favicon", href: "favicon.ico" }],
  11. };
  12. },
  13. };

更多⻚面配置项:

属性名 描述
asyncData 最重要选项, 支持 异步数据处理,该方法的第一个参数为当前⻚面组件的 上下文对象。
fetch asyncData 方法类似,用于在渲染⻚面之前获取数据填充应用的状态树(store)。不同的是 fetch 方法不会设置组件的数据。详情请参考关于fetch方法的文档
loading 如果设置为false,则阻止⻚面自动调用this.$nuxt.$loading.finish()this.$nuxt.$loading.start(),您可以手动控制它,请看例子,仅适用于在nuxt.config.js中设置loading的情况下。请参考API配置 文档loading
transition 指定⻚面切换的过渡动效, 详情请参考 ⻚面过渡动效
scrollToTop 布尔值,默认: false。 用于判定渲染⻚面前是否需要将当前⻚面滚动至顶部。这个配置用于 嵌套路由的应用场景。
validate 校验方法用于校验 动态路由的参数。

异步数据获取

asyncData 方法使得我们可以在 设置组件数据之前异步获取或处理数据 。

范例:获取商品数据

接口准备

  • 安装依赖:npm i koa-router koa-bodyparser -S
  • 接口文件,server/api.js