vue3专栏项目 -- 四、前后端结合(下)

一、async 和 await

1、使用async 和 await 改造异步请求

在接触后端API以后就遇到了越来越多的异步请求,现在我们就使用async 和 await 改造异步请求。

async function是把返回内容包裹成个Promise返回Promise

await 它在async function里面才起作用,它可以放在任何异步的基于Promise的代码之前,它会暂停代码在这行上,直到Promise完成,然后返回结果值

如下,修改我们的异步请求

改为如下:

在function前加async,然后在axios前用await,此时返回的是请求回来的结果,因为我们要的是请求数据里的data,所以我们直接展开即const {data}接里面的data

有点重复,所以我们抽离出来做个函数

2、使用axios 拦截器添加loading效果

发送异步请求的时候,最好在界面给用户一个提示,告诉用户现在数据在读取中请耐心等待这样子,这就是经典的loading问题,这个loading字段显然就是一个全局状态,在各个页面都可能使用,那么提到全局状态,那么自热而然想到了这个store,那么现在我们就给store添加一个loading字段

然后我们在页面加个简单的loading效果

现在这种方法虽然看起来没有什么问题,但是我们要在每次发请求的地方多次加上这种commit信息来触发mutation的变化来修改store中数据的变化,这里仅仅是获取数据即get commit,但是我们后面还会有post的请求,甚至还有update、delete请求,那么每次请求中都要反复去comiit setLoading就比较麻烦,有没有什么地方可以优化。

axios就来帮助我们了,axios有一个关键特性叫Interceptors即拦截器,通过拦截器我们可以在全局层面拦截到在请求发送时和响应返回时的状态,然后我们可以在对应的钩子函数中进行一些逻辑的操作。

如下例子中,可以使用axios.interceptors.request就是发送请求的时候,然后use(),里面有config然后返回config,我们就是在use()中添加逻辑,我们的逻辑就是请求的时候把这个loading设置为true,返回的时候设置为false即可

如下,我们到main.ts中,这里面我们有一个axios.default配置,所以axios的配置呢我们都可以写到这里

现在我们这个loading已经可以在页面运作了,而且每次请求和开始的时候它都会被interceptors即拦截器完美的拦截,每次请求都会自动触发对应的mutation,非常的好用

二、Loader组件编码

1、基本部分

对应这个loading的图标,bootstrap已经为我们提供了现成的解决方案

我们需要一个占满屏幕的遮罩层,然后里面旋转图标,然后一行文字这样子

如下Loader.vue,App.vue

2、使用Teleport 进行改造

前面留下一个问题,就是loader组件是一个全局组件,但是它现在被包裹在app的container下面,

那么样式就可能会受到外层父组件的影响

vue3给我们提供了解决方案,这个解决方案就是Teleport即传送门,把我们要用的内容用<teleport>这个标签进行包裹,其中属性为to指向某个css的selected,如下,我们给指向id为back这么一个元素

但是这时候会报错,因为我们还需要在html中添加入id为back的div,所以如下

加入,如下

但是如果用户想使用这个组件,那么他还必须在html中加上一个这个div,就不方便,不是一个良好的组件设计,所以我们想使用另外的方法来实现对应的功能,我们需要在body中创建一个最顶层的div,我们可以在组件还没渲染即在dom之前手动创建一个div,然后把它id设置成back不就可以了吗,我们应该在setup中创建,因为这时候组件还没有挂载到dom节点上

如下

我们修改一下,让它loader2秒后再消失,如下

然后我们发现,即使loader已经消失了,但是它那个id为back的div还在,而且如果我们进入专栏详情页可以看到是又创建了一个div节点

随着页面来回跳转,这样的节点就越来越多,所以我们要解决这个问题,也就是说在组件卸载以后我们需要手动来清除这个节点,所以我们在onUnmounted中把这个节点删除即可

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

互联网轻量级框架整合之SpringIoC概念详解

在之前的几篇文字中说道容器的概念&#xff0c;实际上Spring也是基于容器的理念&#xff0c;之所以如此成功并不是因为很先进的技术&#xff0c;而是因为理念&#xff0c;其中核心便是IoC(控制反转)&#xff0c;AOP(面向切面编程)&#xff0c;其中IoC是Spring的基础&#xff0c…

腐烂的橘子 - (LeetCode)

一、概述 994. 腐烂的橘子 - 力扣&#xff08;LeetCode&#xff09;&#xff0c;今天刷到这道题&#xff0c;开始按照自己实现的思路写了一次&#xff0c;通过了调试&#xff0c;但是提交的时候&#xff0c;来了一个大的数据&#xff0c;就没有通过测试&#xff0c;百思不得其…

commvault学习(7):恢复oracle

在实际生产环境中&#xff0c;oracle的恢复方式大部分是异机恢复。 环境&#xff1a; 备份机&#xff1a;windows server2008&#xff0c;ip&#xff1a;192.168.20.56 恢复目标机&#xff1a;windows server2008&#xff0c;ip&#xff1a;192.168.20.55 CS、MA&#xff1…

进程和计划任务管理

查看系统进程信息 静态查看系统进程信息之ps命令 &#xff08;每五秒刷新一次数据&#xff09; 方法一&#xff1a;ps aux //显示所有进程 a&#xff1a;显示现行终端下的所有进程&#xff0c;包括其它用户的进程。u&#xff1a;显示进程的归属用户及内存的使用情况。x…

今天开发了一款软件,我竟然只用敲了一个字母(文末揭晓)

软件课题&#xff1a;Python实现打印100内数学试题软件及开发过程 一、需求管理&#xff1a; 1.实现语言&#xff1a;Python 2.打印纸张&#xff1a;A4 3.铺满整张纸 4.打包成exe 先看效果&#xff1a; 1. 2.电脑打印预览 3.打印到A4纸效果&#xff08;晚上拍的&#x…

Java入门基础学习笔记22——程序流程控制

程序流程控制&#xff1a;控制程序的执行顺序。 程序有哪些执行顺序&#xff1f; 顺序、分支和循环。 分支结构&#xff1a; if、switch 循环&#xff1a; for、while、do-while 顺序结构是程序中最简单最基本的流程控制&#xff0c;没有特定的语法结构&#xff0c;按照代码…

​​​【收录 Hello 算法】第 6 章 哈希表

目录 第 6 章 哈希表 本章内容 第 6 章 哈希表 Abstract 在计算机世界中&#xff0c;哈希表如同一位聪慧的图书管理员。 他知道如何计算索书号&#xff0c;从而可以快速找到目标图书。 本章内容 6.1 哈希表6.2 哈希冲突6.3 哈希算法6.4 小结

文本分类的深度注意图扩散网络 笔记

1 Title Deep Attention Diffusion Graph Neural Networks for Text Classification&#xff08;Yonghao Liu、Renchu Guan、Fausto Giunchiglia、Yanchun Liang、Xiaoyue Feng&#xff09;【EMnlp 2021】 2 Conclusion Text classification is a fundamental task with broad…

20240513,常用算法(查找,排序,拷贝替换)

做着一些和考试无关的事情 常用查找算法——续 FIND_IF find_if //按条件查找元素&#xff0c;返回迭代器POS / END()find_if(beg,end,_Fred) _Fred函数或谓词&#xff08;返回BOOL类型的仿函数&#xff09; #include<iostream> #include<string> #includ…

目标检测——YOLOv9算法解读

论文&#xff1a;YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information (2024.2.21) 作者&#xff1a;Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao 链接&#xff1a;https://arxiv.org/abs/2402.13616 代码&#xff1a;https://github.com/W…

kubernetes集群svc的代理模式-iptables修改为ipvs

一、概述\ 我们都知道&#xff0c;k8s集群的外部网络分发&#xff0c;借助kube-proxy组件来完成&#xff1b; 问题&#xff1a;我们为什么要将代理模式修改为ipvs而不继续使用iptables呐&#xff1f; 1&#xff0c;iptables底层使用四表五链完成网络代理&#xff0c;效率比较低…

HackCar – 汽车系统的攻击和防御游乐场

现代汽车配备的微控制器使用控制器局域网 (CAN) 来执行安全和豪华功能。 然而&#xff0c;由于CAN网络缺乏速度控制等线控系统的安全性&#xff0c;因此可能会通过消息注入攻击来 劫持车辆&#xff0c;从而造成生命危险。 尽管研究人员努力提出入侵检测、加密和身份验证等解…

研究幽灵漏洞及其变种(包括但不限于V1-V5)的攻击原理和基于Github的尝试

一、研究幽灵漏洞及其变种(包括但不限于V1-V5)的攻击原理 1.1 基本漏洞原理(V1) 幽灵漏洞的基本原理是由于glibc库中的gethostbyname()函数在处理域名解析时,调用了__nss_hostname_digits_dots()函数存在缓冲区溢出漏洞。 具体来说,__nss_hostname_digits_dots()使用一个固定…

牛客网刷题 | BC82 乘法表

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 输出九九乘法表&am…

[GWCTF 2019]re3

int mprotect(void *addr, size_t len, int prot);实现内存区域的动态权限控制: addr&#xff1a;要修改保护权限的内存区域的起始地址。len&#xff1a;要修改保护权限的内存区域的长度&#xff08;以字节为单位&#xff09;。prot&#xff1a;要设置的新的保护权限&#xff…

宠物管理系统带万字文档

文章目录 宠物管理系统一、项目演示二、项目介绍三、19000字论文参考四、部分功能截图五、部分代码展示六、底部获取项目源码和万字论文参考&#xff08;9.9&#xffe5;带走&#xff09; 宠物管理系统 一、项目演示 宠物管理系统 二、项目介绍 基于springbootvue的前后端分离…

CentOs搭建Kubernetes集群

kubeadm minikube 还是太“迷你”了&#xff0c;方便的同时也隐藏了很多细节&#xff0c;离真正生产环境里的计算集群有一些差距&#xff0c;毕竟许多需求、任务只有在多节点的大集群里才能够遇到&#xff0c;相比起来&#xff0c;minikube 真的只能算是一个“玩具”。 Kuber…

如何利用甘特图来提高资源的是使用效率?

在项目管理中&#xff0c;甘特图是一种常用的工具&#xff0c;用于规划和跟踪项目进度。它通过条形图的形式展示项目的时间表和任务依赖关系&#xff0c;帮助项目经理和团队成员清晰地了解项目的时间线和进度。通过合理利用甘特图&#xff0c;可以显著提高资源的使用效率&#…

【C++】学习笔记——继承_1

文章目录 十一、模板进阶5. 模板的优缺点 十二、继承1. 继承的概念及定义2. 基类和派生类对象赋值转换3. 继承中的作用域4. 派生类的默认成员函数 未完待续 十一、模板进阶 5. 模板的优缺点 优点&#xff1a; 模板复用了代码&#xff0c;节省资源&#xff0c;更快的迭代开发&a…

网络安全快速入门(十二) linux的目录结构

我们前面已经了解了基础命令&#xff0c;今天我们来讲讲linux中的目录结构&#xff0c;我们在了解linux的目录结构之前&#xff0c;我们先与Windows做一个对比 12.1linux和windows的目录结构对比 在之前认识liunx的章节中&#xff0c;我们已经简单说明了linux和window的目录结构…