基于Vue + 数据组装 + axios请求接口 实现图书信息提交功能实战

news2024/10/7 4:36:06

前言

上节回顾

上一节针对图书信息录入前的准备做了讲解,主要是使用ElementUIel-form做录入界面基本布局,包含了el-input el-select el-date-picker 还有图片上传等组件。同时在布局完成后,配合使用el-form自带的rules进行数据提交前验证。还不明白上下文的同学可以去看一看 : 使用Vue + el-form + rules实现图书信息录入功能实战

本节介绍

这一节已经是本专栏的第13篇实战博客了,在上一节的基础上,提交数据已经验证完成了,该开始组装数据,再利用axios进行提交了。一旦提交成功,项目中一大块功能就算完成了,接下来就该图书列表模块了。

目录

前言

一、数据组装

1. 默认数据组装

2. Vue项目JSON数据的组装

二、axios请求的功能点

1. 新建api文件

2. 维护录入图书url

3. 添加录入图书信息的请求方法

三、业务组件内发送请求

1. 引入请求方法 

2. 发送请求

3. 接口返回数据的处理 

4. setTimeout要不要手动清除

最后


一、数据组装

现在一般接口提交数据,前后端都会协调使用JSON格式的,也就是说接口的请求头中 Content-Type 属性值为 application/json。

1. 默认数据组装

在使用Vue项目之前,我们在提交数据的时候,需要对入参数据做组装,或是更早习惯使用form表单的时候,表单中元素的name值就是要提交的数据。那么正常JSON数据组装,在本案例中应该是这样的

let params = {
            bookName: this.form.bookName,
            bookNo: this.form.bookNo,
            bookType: this.form.bookType,
            author: this.form.author,
            publisher: this.form.publisher,
            publishDate: this.form.publishDate,
            description: this.form.description,
            coverImage: this.form.coverImage,
}

2. Vue项目JSON数据的组装

但是在Vue项目中,数据依赖除了可以和DOM部分一 一 对应,其实你会发现,数据依赖中的form正好就是提交数组的预组装,所以可以直接这样:

let params = this.form;

这样一来,params拿到的JSON数据正好就是form的数据。 不够在本案例中,form的数据正好和接口提交数据对应上了,可以这样轻松搞定。但现实工作中,一定会有幺蛾子类型的项目,需要使用上一种组装方式。所以第一种组装数据的方式也一定是用得到的。

 

二、axios请求的功能点

数据已经组装完成,接下来就是要发送axios请求了,那么在本项目中都需要做哪些准备呢,一起来看一下

1. 新建api文件

到了一个新模块了,所以发送请求的实例方法要新建一个文件了,新建文件 src\api\bookManager.js 

2. 维护录入图书url

 src\config\httpUrl.js 文件中,添加录入图书的接口url,这个url是服务端人员定义好,然后给我们的,如图

3. 添加录入图书信息的请求方法

在刚刚新建的 src\api\bookManager.js  文件中,添加请求方法,后续整个图书管理的模块,请求方法都会在这个文件里,之前上传图片的接口方法单独放了一个文件,是因为项目中可能有多处需求需要用到图片上传,所以图片上传算作是一个公共方法,就不往这个文件里加了,代码如下

import request from '../utils/httpRequire.js';
import { URLS } from '../config/httpUrl.js';

// 录入图书信息
export function enterBook(data) {
    return request({
        url: URLS.createBook,
        method: 'post',
        data,
    });
}

三、业务组件内发送请求

入参数据准备好了,axios请求的零件准备好了,接下来就该回到业务组件内,真正的触发,发送录入图书信息的请求了。

1. 引入请求方法 

 src\views\bookManager\Create.vue 文件中引入axios实例方法

import { enterBook } from '@/api/bookManager.js';

2. 发送请求

上一节说道,提交按钮调用了 handleSubmit 方法,这个方法在验证数据通过后,为了避免按钮被重复连续点击,所以加了 isLoading 的开关限制,默认设置为false,当开始提交数据的时候,更改为true,然后提交按钮就开始处于loading提交中的状态。代码如下:

handleSubmit() {
      this.$refs.form.validate((valid) => {
        if (valid) {
          console.log('已验证通过');
          this.isLoading = true;

          let params = this.form;

          enterBook(params).then((res) => {
            console.log(res);
            if (res.code != 200) {
              this.isLoading = false;
              this.$message.error(res.message);
              return;
            }

            this.isLoading = false;
            this.$message({
              message: '提交成功',
              type: 'success'
            });

            let enterTimeout = setTimeout(() => {
              window.clearTimeout(enterTimeout);
              enterTimeout = null;
              this.$router.push('/book-manager');
            }, 1500)
          })
        }
      })
},

3. 接口返回数据的处理 

接口返回一定会存在正常与异常的情况,所以当接口异常的情况下,也就是返回的code值不是200的时候,我们给用户提示msg信息,并且使isLoading开关变量变为false,使用户处理完异常情况后可以继续提交,同时添加 return 代码,使代码停止继续执行

 如果接口返回正常的情况,那么则正常弹出“提交成功”的提示,并且在用户看到弹框提示后,延迟1500毫秒跳转到图书列表页面去。

4. setTimeout要不要手动清除

很多人觉得setTimeout如果内部没有引用外部复合变量,或者没有用于递归计算的话,可以不用手动清除,浏览器会自动将其释放掉。不过狗哥建议,凡是用到setTimeout的地方,不管内部做了多么简单的事情,都要将其手动清除。而且代码也不复杂,顺手的事儿。因为在代码后续维护中,谁也不知道谁会在代码里搞什么,谁也说不清未来的技术会出什么幺蛾子事,就像早先没人说setInterval这个啦,那个啦,突然某一天,面试官都开始问setInterval有什么问题,就像某一天一觉醒来,公司的服务端开始升级log4j了,而且很多人喜欢使用第三方组件啥的,那install一下,很多人谁注意都安装啥了,万一哪天用户正在使用,突然蹦出一个精彩信息来呢,哈哈,说远了。

最后

本专栏是我和服务端天哥 (天哥主页)共同打造的前后端分离项目实战系列,天哥的服务端是:SpringBoot+Vue前后端分离项目实战。天哥接口已经出了不少了,我最近想写本书,正在没日没夜的勤奋刻苦,所以进度落后了不少,我会加把劲儿的,好多购买了专栏的小伙伴也获取了最新的源码,祝你们好运。

最后为大家准备了投票环节,希望你喜欢

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

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

相关文章

生鲜小程序怎么做

生鲜超市小程序功能介绍 1、产品展示:果蔬生鲜的图片展示,食欲满满的食材图,丰富的生鲜品类,细致的产品描述,提高用户的购买欲望和复购率。 2、在线支付:用户选择好所需食材在线下单,利用第三…

[Linux] 守护进程介绍、服务器的部署、日志文件...

守护进程 我们使用的系统中, 一般以服务器的方式工作 对外提供服务的服务器, 都是以守护进程的方式在系统中工作的. 比如, 我们使用Linux服务器时, 大多都会使用一些终端软件通过ssh远程连接服务器使用. 这就是因为, Linux服务器中 通常默认运行着 ssh服务器的守护进程: 守护…

利用数据分析告警机制,实现鸿鹄与飞书双向集成

需求描述 实现鸿鹄与飞书的双向集成,依赖鸿鹄的告警机制,可以发送用户关心的信息到飞书。同时依赖飞书强大的卡片消息功能,在飞书消息里面能够通过链接(如下图)返回到鸿鹄以方便用户进一步排查和分析问题。 解决方案 1…

Goby 漏洞发布|致远 M1 移动端 userTokenService 代码执行漏洞

漏洞名称:致远 M1 移动端 userTokenService 代码执行漏洞 English Name:seeyon M1 Server userTokenService Code Execution Vulnerability CVSS core: 10.0 影响资产数:7050 漏洞描述: 致远 M1 Server是一个移动服务。致远 …

7zip修复右击菜单的问题

以管理员权限运行7-Zip File Manager后 ,要在右键菜单显示 图标,不然就有问题

苍穹外卖day03——菜品管理业务代码开发

目录 公共字段自动填充——问题分析和实现思路 公共字段自动填充——代码实现(1) 公共字段自动填充——代码实现完善(2) 新增菜品——需求分析与设计 产品原型 ​编辑 接口设计 ​编辑 数据库设计 新增菜品——代码开发1(文件上传接口) 配置文件 Controller层代码 前后…

项目名称:智能家居边缘网关项目

一,项目介绍 软件环境: C语言 硬件环境: STM32G030C8TX单片机开发板 开发工具: Linux平台GCC交叉编译环境以及ukeil (1)边缘网关概念 边缘网关是部署在网络边缘侧的网关,通过网络联接、协议转换等功能联接物理和数字世界,提供轻量化的联接管…

大语言模型的预训练[2]:GPT、GPT2、GPT3、GPT3.5、GPT4相关理论知识和模型实现、模型应用以及各个版本之间的区别详解

大语言模型的预训练[2]:GPT、GPT2、GPT3、GPT3.5、GPT4相关理论知识和模型实现、模型应用以及各个版本之间的区别详解 1.GPT 模型 1.1 GPT 模型简介 在自然语言处理问题中,可从互联网上下载大量无标注数据,而针对具体问题的有标注数据却非常少&#x…

原型设计用什么比较好?这4款值得体验

无论是UI还是UX设计师,工作中肯定少不了交互设计。在设计原型图时,一款好用的原型设计工具肯定是必不可少,本文就整理了4款为大家推荐,一起来看看吧 即时设计 即时设计是一款更适合国内UI或UX设计师和产品经理使用的原型设计工具…

如何使用Python三方库CCXT

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学,点击下方链接报名: 量化投资速成营(入门课程) Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…

<数据结构>NO11.归并排序|递归|非递归|优化

文章目录 归并排序递归写法非递归写法修正方案1.归并一段拷贝一段修正方案2.修正区间 算法优化算法分析 归并排序的应用外排序和内排序 归并排序 递归写法 思路: 如果给出两个有序数组,我们很容易可以将它们合并为一个有序数组。因此当给出一个无序数组时&#xf…

如何解决循环引用的问题

本文已收录于专栏 《Java》 目录 概念说明发现问题解决问题分析问题具体解决注解说明代码实现效果展示 总结提升 概念说明 循环引用是指在对象之间存在相互引用的情况。具体来说,当一个对象A引用了另一个对象B,而对象B又引用了对象A,它们之间…

软件研发开发人员成本计算器

写了个简单的人员工资计算器,用最简单的人天数计算研发投入,其他费用计算稍后补充完善 软件研发成本计算 ——高级工程师中级工程师初级工程师平均日工资项目阶段高级工程师人天中级工程师人天初级工程师人天调研方案产品设计软件开发测试部署培训试运…

操作系统(王道)- 初识操作系统

一、什么是操作系统? 操作系统可以这么理解 操作系统的定义: 操作系统是整个计算机的硬件和软件的管理者!!! 二、操作系统的功能和目标 作为计算机硬件和软件的管理者,操作系统做了什么? 操作系…

安达发|工业系统APS软件与MES软件有哪些区别?

MES 和 APS 有什么区别?MES 是一个制造执行系统,APS 是一个高级计划排程系统系统,两者是互补的关系,APS 和 MES 可以实现计划和车间执行的闭环管理模式。MES 和 APS 有什么区别? mes和aps的区别: MES 是智能化工厂…

【1++的Linux】之进程(一)

👍作者主页:进击的1 🤩 专栏链接:【1的Linux】 文章目录 一,冯诺依曼与操作系统概念1.1 冯诺依曼体系结构1.2 操作系统 二,进程的基本概念 一,冯诺依曼与操作系统概念 1.1 冯诺依曼体系结构 如…

如何关闭网页版【知乎】等页面的登录弹窗(以谷歌浏览器为例)

如何关闭网页版【知乎】等页面的登录弹窗(以谷歌浏览器为例) 在不登陆知乎的情况下仍然可以正常浏览页面,可是每次打开新页面会重复出现弹窗要求用户登录。如何屏蔽掉这一弹窗呢? 在浏览器中把知乎网址设置为禁止使用javascript 在chrome的…

C#盯盘小工具,“监”

也是一个小工具,用来看大A股票和主要指数行情的。 如果你是一个上班族,同时你也是一颗小韭菜,a股在开市交易盘中时刻惦记着股票是涨了还是跌了,却不能时刻盯着手机看行情,也不能在电脑上开着同花顺来回切窗口&#xff…

4.CSS(一)

目录 一、CSS简介 二、CSS基础选择器 (一)标签选择器 (二)类选择器 类选择器-多类名 (三)id选择器 (四)通配符选择器 (五)总结 三、CSS字体属性 &…

Acwing.906 区间分组(贪心)

题目 给定N个闭区间[ai,bi],请你将这些区间分成若千组,使得每组内部的区间两两之间(包括端点)没有交集,并使得组数尽可能小。 输出最小组数。 输入格式 第一行包含整数N,表示区间数。 接下来N行,每行包含两个整数ai…