nuxtjs生命周期、项目创建、声明式导航与编程式导航、动态路由、嵌套路由、配置式路由、定制默认应用模板、扩展默认布局

news2024/11/27 13:40:15

文章目录

  • 1. 介绍
  • 2. 生命周期
  • 3. 项目创建
  • 4. 声明式导航和编程式导航
  • 5. 动态路由参数和验证
  • 6. 嵌套路由
  • 7. 404页面
  • 8. 配置式路由
  • 9. 定制默认应用模板
  • 10. 扩展默认布局
    • 10.1 默认布局
    • 10.2 自定义布局
    • 10.3 显示错误的布局


1. 介绍

Nuxt.js 是一个基于 Vue.js 的通用应用框架。通过对客户端/服务端基础架构的抽象组织,Nuxt.js 主要关注的是应用的 UI渲染。Nuxt.js 预设了利用 Vue.js 开发服务端渲染的应用所需要的各种配置。作为框架,Nuxt.js 为 客户端/服务端 这种典型的应用架构模式提供了许多有用的特性,例如异步数据加载、中间件支持、布局支持等。

Nuxt.js 集成了以下组件/框架,用于开发完整而强大的 Web 应用:

  • Vue 2
  • Vue-Router 【约定式路由】
  • Vuex (当配置了 Vuex 状态树配置项 时才会引入)
  • Vue 服务器端渲染
  • Vue-Meta

压缩并 gzip 后,总代码大小为:57kb (如果使用了 Vuex 特性的话为 60kb)。

另外,Nuxt.js 使用 Webpack 和 vue-loader 、 babel-loader 来处理代码的自动化构建工作(如打包、代码分层、压缩等等)。

2. 生命周期

在 vue 中,输入要访问的页面网址,回车之后 vue 会先做客户端渲染,然后发送网络请求,拿到数据,然后做相关处理后渲染出完整页面。

而在 nuxt 中,输入网址回车之后,会先发送请求给服务器,然后服务器会查找数据库,把数据得到之后,进行整理后生成 html ,然后发送给客户端。

在这里插入图片描述

3. 项目创建

yarn 安装:

yarn create nuxt-app < project-name >
cd project
yarn
yarn dev

npm 安装:

npm init nuxt-app <project-name>

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4. 声明式导航和编程式导航

声明式导航:

<template>
  <div>
    <h3>首页</h3>
    <hr>
    <!-- 写法1 -->
    <!-- <router-link to="/about">关于</router-link> -->
    <!-- 写法2 -->
    <!-- nuxt-link 中的属性和 router-link 中的属性是一样的 -->
    <nuxt-link to="/about">关于</nuxt-link>
  </div>
</template>

<script>
export default {

}
</script>

<style lang="scss" scoped>

</style>

编程式导航:

<template>
  <div>
    <h3>关于页面</h3>
    <hr>
    <button @click="goHome">去首页</button>
  </div>
</template>

<script>
export default {
  methods: {
    goHome() {
      this.$router.push('/')
    }
  }
}
</script>

<style lang="scss" scoped>

</style>

在这里插入图片描述

5. 动态路由参数和验证

首页:

<template>
  <div>
    <h3>首页</h3>
    <hr>
    <ul>
      <li v-for="item in news" :key="item.id">
        <nuxt-link :to="`/news/${item.id}`">{{ item.title }}</nuxt-link>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      news: [
        { id: 1, title: '新闻1' },
        { id: 2, title: '新闻2' },
        { id: 3, title: '新闻3' }
      ]
    }
  },
}
</script>

<style lang="scss" scoped>

</style>

新闻页:

在这里插入图片描述

<template>
  <div>
    <!-- /news/:id => /news/100 -->
    <h3>根据id来得到当前页面</h3>
  </div>
</template>

<script>
export default {
  // 服务器渲染时可参数进行验证 -- 服务器端
  validate({ params, redirect }) {
    // 当为true时,则继续向下渲染,false停止
    // return /\d+/.test(params.id);
    if (/\d+/.test(params.id)) {
      return true
    }
    return redirect('/err')
  }
}
</script>

<style lang="scss" scoped>

</style>

错误页:

<template>
  <div>
    <h3>动态路由参数验证错误</h3>
  </div>
</template>

<script>
export default {

}
</script>

<style lang="scss" scoped>

</style>

在这里插入图片描述

6. 嵌套路由

在这里插入图片描述

后台管理页:

<template>
  <div>
    <h3>我是一个后台</h3>
    <!-- 如果它是一个嵌套路由,则在此处一定要放置挂载点 -->
    <nuxt-child />
  </div>
</template>

<script>
export default {

}
</script>

<style lang="scss" scoped>

</style>

用户路由:

<template>
  <div>
    <h3>/admin/user 路由</h3>
  </div>
</template>

<script>
export default {

}
</script>

<style lang="scss" scoped>

</style>

在这里插入图片描述

7. 404页面

在这里插入图片描述

<template>
  <div>
    <!-- 如果你在layouts中有定义error.vue,也不会影响到它,它的404优先级更高 -->
    <!-- 只能处理404路由,客户端处理404,服务器返回的请求状态码200 -->
    <h3>404页面</h3>
  </div>
</template>

<script>
export default {
}
</script>

<style lang="scss" scoped>

</style>

在这里插入图片描述

8. 配置式路由

在 nuxt.config.js 文件中添加配置:

// 路由配置 也可以进行配置式路由
router: {
    // 全局中间件注册
    // middleware: 'checklogin',
    // 动态添加路由
    extendRoutes(routes, resolve) {
        // 使用 push 添加要注意在pages中不能有_.vue这样的文件,否则路由匹配不成功
        // routes.push({
        //   path: '/abc',
        //   component: resolve(__dirname, 'pages/about.vue')
        // })

        // 如果你用_.vue,则需要用unshift方法来动态添加路由信息
        routes.unshift({
            path: '/abc',
            component: resolve(__dirname, 'pages/about.vue')
        })
    }
}

在这里插入图片描述

9. 定制默认应用模板

你可以定制化 Nuxt.js 默认的应用模板。定制化默认的 html 模板,只需要在 src 文件夹下(默认是应用根目录)创建一个 app.html 的文件。

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>nuxtjs使用</title>
  <!-- reset.css -->
</head>

<body>
  <h3>我是模板</h3>
  {{APP}}
</body>

</html>

在这里插入图片描述

10. 扩展默认布局

10.1 默认布局

Nuxt.js 允许你扩展默认的布局,在 layout 目录下创建自定义的布局。可通过添加 layouts/default.vue 文件来扩展应用的默认布局。别忘了在布局文件中添加 <nuxt/> 组件用于显示页面的主体内容。

在这里插入图片描述

<template>
  <div>
    <!-- 它可以理解为子路由 嵌套路由 -->
    <h3>我是一个默认的全局布局文件</h3>
    <!-- 如果你用了全局布局,则在此处一定要添加一个挂载点 -->
    <nuxt />
  </div>
</template>

<script>
export default {
  // 路由独享
  // middleware: 'checklogin'
}
</script>

<style lang="scss" scoped>

</style>

假如现在有一个登录页面,如果不对布局进行配置,默认会显示全局布局文件:

<template>
  <div>
    <h3>登录页面</h3>
  </div>
</template>

<script>
export default {

}
</script>

<style lang="scss" scoped>

</style>

在这里插入图片描述

10.2 自定义布局

现在我们在 layouts 目录下,创建一个 login.vue 布局文件(layouts/login.vue):

<template>
  <div>
    <h1>aaaaaaaa</h1>
    <nuxt />
  </div>
</template>

<script>
export default {

}
</script>

<style lang="scss" scoped>

</style>

并且在登录页面(pages/login.vue),添加自定义配置属性:

<template>
  <div>
    <h3>登录页面</h3>
  </div>
</template>

<script>
export default {
  // 此配置属性,可以自定义布局文件
  layout: 'login'
}
</script>

<style lang="scss" scoped>

</style>

这时就会显示自定义的布局配置:

在这里插入图片描述

假如我们不想在当前登录页面中使用任何布局,可以在 layouts 目录下创建 empty.vue 空布局文件:

<template>
  <nuxt />
</template>

<script>
export default {

}
</script>

<style lang="scss" scoped>

</style>

然后再将登录页面中的布局配置修改为layout: 'empty'即可:

在这里插入图片描述

注意:app.html 中的应用模板还会显示。

10.3 显示错误的布局

你可以通过编辑 layouts/error.vue 文件来定制化错误页面。这个布局文件不需要包含 <nuxt/> 标签。你可以把这个布局文件当成是显示应用错误(404,500 等)的组件。

layouts/error.vue:

<template>
  <div>
    <!-- 它是以服务器端返回,返回http状态码 404 500 403 -->
    <h3>我是一个错误页面</h3>
  </div>
</template>

<script>
  export default {

  }
</script>

<style lang="scss" scoped>

</style>

pages/_.vue:

<template>
  <div>
    <!-- 如果你在layouts中有定义error.vue,也不会影响到它,它的404优先级更高 -->
    <!-- 只能处理404路由,客户端处理404,服务器返回的请求状态码200 -->
    <h3>404页面</h3>
  </div>
</template>

<script>
export default {
}
</script>

<style lang="scss" scoped>

</style>

在这里插入图片描述

最终结果会优先显示 pages 中的错误页面。如果想要显示 layouts 中的错误页面,则 pages 中的错误页面文件名不能使用下划线。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/47849.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

离线解锁 CodeCombat 全关卡教程 使用docker安装实现

背景 暂时还没收入&#xff0c;想玩顺便&#xff0c;但官方的有点贵&#xff08;是真的贵&#xff0c;扛不住&#xff09; 前期准备 下载安装docker desktop https://www.123pan.com/s/fmvUVv-HqApH&#xff0c; 这个安装不会的随便搜一个教程&#xff0c;挺多的。我随便找了一…

创建实例化新表格及新行

这期讲一下如何创建创建实例化新表格及行进行添加数据&#xff0c; 在上图可以看到先实例化DataTable表格&#xff0c;用于接收数据&#xff0c; Columns 获取此表的列的集合&#xff0c; Add 创建并添加DataColumn对象&#xff0c; Typeof 数据类型 创建并添加表头。 接下来…

Java定时器选择

java计时器和死循环哪个好&#xff1f;哪个建议使用&#xff1f; 计时器性能更好&#xff0c;但是写起来稍微复杂一点。如果是非常短暂的延迟&#xff0c;用死循环也未尝不可。一般来说能不用死循环的尽量不用死循环&#xff01;如果你使用的是JDK1.5以上的&#xff0c;可以使…

PyQt5可视化编程-控件

控件就像是应用这座房子的一块块砖。PyQt5有很多的控件&#xff0c;比如按钮&#xff0c;单选框&#xff0c;滑动条&#xff0c;复选框等等。我们将介绍一些很有用的控件&#xff1a; QCheckBox,ToggleButton,QSlider,QProgressBar, QCalendarWidget,QPixmap,QLineEdit,QSplitt…

实验四+ R型指令设计实验【计算机组成原理】

实验四+ R型指令设计实验【计算机组成原理】 前言推荐实验四+ R型指令设计实验结果附录defineInstMemIDEX最后前言 编写于 2022/11/22 VIP发布于 2022/11/22 实验于 2022/11/24 发布于 2022/11/24 以下内容源自计算机组成原理实验 仅供学习交流使用 推荐 实验四+ R型指令…

论文指标评价体系及权重计算

一 、评价指标体系 评价指标体系构建在实际研究中使用较为广泛&#xff0c;比如企业绩效评价指标体系构建、政府财政支出绩效评价、医院绩效评价研究等等。 ‍1、相关背景 在中国知网搜索 “ 评价指标 ”、“ 指标体系权重 ” 等相关关键词&#xff0c;可以发现&#xff0c;…

学习ASP.NET Core Blazor编程系列十三——路由(完)

九、NavigationManager 有的时候我们可能需要在代码里进行导航&#xff0c;如果是JavaScript我们会用window.location来切换页面&#xff0c;Blazor为我们提供了相应的封装&#xff1a;NavigationManager。使用NavigationManager可以通过代码直接进行页面间的跳转。我们在BookI…

算法训练Day34 贪心算法专题 | LeetCode1005.K次取反后最大化的数组和 ;134.加油站;135.分发糖果(不要两头兼顾,一边一边处理)

前言&#xff1a; 算法训练系列是做《代码随想录》一刷&#xff0c;个人的学习笔记和详细的解题思路&#xff0c;总共会有60篇博客来记录&#xff0c;计划用60天的时间刷完。 内容包括了面试常见的10类题目&#xff0c;分别是&#xff1a;数组&#xff0c;链表&#xff0c;哈…

基于人工势场法的移动机器人路径规划研究(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 路径规划是移动机器人领域的热点研究方向&#xff0c;人工势场法已在工业机器人路径规划中得到广泛应用&#xff0c;近年来正逐…

RKMEDIA--VI的使用

在上一篇文章RKMEDIA使用简介中简单的介绍了rkmedia的组成部分&#xff0c;本章主要聊聊VI模块。 rkmedia中的VI模块主要可以从两个方式获取流&#xff1a;直接打开video节点的方式、使用rk平台的rkaiq。 1、直接打开video节点的方式 顾名思义只需要在vi初始化中配置VI_CHN_AT…

Redeis缓存查询基于元注解与AOP结合使用——不过时的优雅

Redeis缓存查询基于元注解与AOP结合使用 根据优化需要&#xff0c;数据查询的时候无法避免的使用Redis基于缓存查询&#xff0c;进而减少对于数据库的查询压力&#xff0c;对于过多的方法基于缓存存储&#xff0c;为提高代码的复用性&#xff0c;采用一种不过时的写法。 整体的…

spring JPA整合hibernate,IDEA社区版,Java

spring JPA整合hibernate&#xff0c;IDEA社区版&#xff0c;Java 本文基于IDEA社区版&#xff0c;不是IDEA企业版。 &#xff08;1&#xff09;首先用IDEA新建一个spring web项目。参考文章&#xff1a; IDEA社区版(Community Edition)创建Springboot-Web项目&#xff0c;J…

第十二章 使用 Monorepo 方式管理组件生态

组件库一般都会配有周边产品&#xff0c;比如 Admin 、Template、CLI 工具等等。周边产品相当于有关联的多个项目&#xff0c;更准确的说法是多个软件包。这个时候就应该使用 Monorepo 方式组织代码&#xff0c;方便频繁在多个项目间同时交替开发&#xff0c;同时发布&#xff…

图解LeetCode——895. 最大频率栈(难度:困难)

一、题目 设计一个类似堆栈的数据结构&#xff0c;将元素推入堆栈&#xff0c;并从堆栈中弹出 出现频率 最高的元素。 实现 FreqStack 类: FreqStack() 构造一个空的堆栈。void push(int val) 将一个整数 val 压入栈顶。int pop() 删除并返回堆栈中出现频率最高的元素。如果出…

圣杯与双飞翼布局,clip-path,列表与生成元素,计数器

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录圣杯与双飞翼布局clip属性clip-path属性例子&#xff08;不同区域使用不同颜色的导航&#xff09…

【MySQL 18】Docker 安装 MySQL8 .0.30

1、查看可用的 MySQL 版本 访问 MySQL 镜像库地址&#xff1a; https://hub.docker.com/_/mysql?tabtags 。2、拉取 MySQL 8.0.30 镜像 拉取官方的指定版本的镜像&#xff1a; docker pull mysql:8.0.30[rootlocalhost deploy]# docker pull mysql:8.0.30 8.0.30: Pulling…

Gly-Gly-Arg, 54944-27-3/55033-48-2

贻贝信息素的模拟物&#xff0c;诱导各种贻贝物种的聚集&#xff0c;如绒螯虾。GGR还能刺激浮游生物幼虫定居。 编号: 401458中文名称: Gly-Gly-Arg英文名: Gly-Gly-ArgCAS号: 54944-27-3/55033-48-2单字母: H2N-GGR-OH三字母: H2N-Gly-Gly-Arg-COOH氨基酸个数: 3分子式: C10H2…

【C语言初阶(NEW)】五、操作符详解(二)|隐式类型转换|算术转换|操作符的属性

目录 一、表达式求值 1.1 隐式类型转换 1.1.1 什么是整型提升&#xff08;整型提升&#xff09; 1.1.2 整型提升的意义 1.1.3 有符号&#xff08;signed&#xff09;与无符号&#xff08;unsigned&#xff09;的区别 1.1.4 有符号&#xff08;signed&#xff09;类型的整…

Redis学习笔记②实战篇_黑马点评项目

若文章内容或图片失效&#xff0c;请留言反馈。部分素材来自网络&#xff0c;若不小心影响到您的利益&#xff0c;请联系博主删除。 资料链接&#xff1a;https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA&#xff08;提取码&#xff1a;eh11&#xff09;在线视频&#xff1a;…

知道创宇ScanA免费试用|守护网络空间内容安全生命线

《淮南子说山训》中有言&#xff0c;“众曲不容直&#xff0c;众枉不容正&#xff0c;故……众议成林&#xff0c;无翼而飞&#xff0c;三人成市虎”。随着互联网社交、即时通讯工具等社交媒体的蓬勃发展&#xff0c;大众发布、传播和获取信息的方式更加简便、渠道更为广泛。也…