前端实现真实可动态变化进度条,axios+ Ant Design Vue实现.

这篇具有很好参考价值的文章主要介绍了前端实现真实可动态变化进度条,axios+ Ant Design Vue实现.。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近有一个新需求,要求在前端实现真实的进度条展示,我首先想到了 Ant Design Vue的upload组件,在antd官网里upload组件不仅有上传功能,并且还附带了Progress 进度条组件,还拥有上传成功和失败的两种状态的区分,可以说是十分贴心了,如图

axios 进度条,vue.js,前端,javascript

 但是很可惜这个组件上传文件的话,你要在action里面指定你上传的路径,他会通过change函数传递你选择的文件列表而后自动把这个文件拿到并且上传到你给的地址中去,(也就是说你只需要给一个后端地址,其余的你选择了文件他就会帮你上传的)代码如下所示,

<template>
  <a-upload-dragger
    v-model:fileList="fileList"
    name="file"
    :multiple="true"
    action="https://www.mocky.io/v2/5cc8019d300000980a055e76"
    @change="handleChange"
    @drop="handleDrop"
  >
    <p class="ant-upload-drag-icon">
      <inbox-outlined></inbox-outlined>
    </p>
    <p class="ant-upload-text">Click or drag file to this area to upload</p>
    <p class="ant-upload-hint">
      Support for a single or bulk upload. Strictly prohibit from uploading company data or other
      band files
    </p>
  </a-upload-dragger>
</template>
<script lang="ts">
import { InboxOutlined } from '@ant-design/icons-vue';
import { message } from 'ant-design-vue';
import { defineComponent, ref } from 'vue';
import type { UploadChangeParam } from 'ant-design-vue';

export default defineComponent({
  components: {
    InboxOutlined,
  },
  setup() {
    const handleChange = (info: UploadChangeParam) => {
      const status = info.file.status;
      if (status !== 'uploading') {
        console.log(info.file, info.fileList);
      }
      if (status === 'done') {
        message.success(`${info.file.name} file uploaded successfully.`);
      } else if (status === 'error') {
        message.error(`${info.file.name} file upload failed.`);
      }
    };
    return {
      handleChange,
      fileList: ref([]),
      handleDrop: (e: DragEvent) => {
        console.log(e);
      },
    };
  },
});
</script>

但是我这个项目里面不仅要求上传文件,同时还要传递一定的参数,那就不能像他这样直接给一个地址了,没办法只另辟蹊径了.上面说过其实antd 的upload组件里面也是包含的Progress 进度条组件,那这样的话我们刚好用它的Progress 组件就好了.

antd官网Progress组件示例

axios 进度条,vue.js,前端,javascript

 接下来就是具体的操作步骤了,其实也很简单

1.引入Progress并使用,同时给percent属性绑定一个uploadProgress的自定义值,这个percent属性其实就是进度条显示的百分比,设置100就是进度条全满,设置为0就是进度条为空.(进度条需要自己放在合适的位置)

axios 进度条,vue.js,前端,javascript

2.调用函数,手动拿取文件并发送请求,如下图SystemImports函数其实就是一个请求函数,第一个参数就是后端需要的额外参数(这个不重要,属于我的项目的需求),第二个参数formData其实就是我们拿取到的文件并给他以formData的形式传给后端,也就是上传文件并获取这一过程(这个过程不懂得可以直接搜索js原生文件上传formData形式,我在这里就不过多赘述了)第三个参数也是最重要的参数,图中可以看到第三个参数是一个回调函数,我把这个回调函数接收到的参数(progressEvent)里的(loaded)属性和(total)进行处理后赋值给了uploadProgress.value,第一步里面percent属性绑定的值也就是进度条的进度刚好就是uploadProgress.value.也就是说我这里处理的其实就是进度条的实时进度.

axios 进度条,vue.js,前端,javascript

3.那为什么我可以在直接拿到第三个参数回调函数的参数值progressEvent并且直接使用呢,这样就可以拿到实时进度了吗,其实关键就在下面这一步,如图这是我封装好的请求函数,这里有一个重要的属性就是onUploadProgress,我将第三个参数直接赋给他了,其实这样一来我们在上面请求函数里拿到的参数progressEvent就是该请求的一些实时信息,这个信息是会同步一直更新的 在你上传请求结束之前.

这是axios官网对onUploadProgress的解释

axios 进度条,vue.js,前端,javascript

 

progressEvent就是获得的当前监控的上传信息,而progressEvent.loaded就是当前请求已发送数量,progressEvent.total就是当前请求应该发送的总数据数量,通过相应的处理自然可以知道当前处理进行到百分之几了,然后赋值给percent属性就可以了,所以到这一步基本上就可以像图片中那样处理进度条了,进度条也会实时变化了.

axios 进度条,vue.js,前端,javascript

 到了这里可能有些人试过之后发现,进度条确实变了 但是每次都是只变动一次,从0到100就结束了,这很有可能是因为上传速度过快,间隔过小导致的,建议开启浏览器调试,并切换到慢速3g上传一些较大的文件再次测试.当时我就能看到打印了许多个86的值,(第二步的图片里,我再处理函数里面打印了progressEvent)

以上步骤其实已经能够实时显示进度条了,其实还有一个问题需要处理,就是我们前端上传完毕了,但是后端还需要处理时间呀,那此时我们的上传进度是多少呢,是100%因为uploadProgress监控的是上传进度的完成,这就会造成我们进度条已经100%,但是后端仍需时间处理,最后导致返回滞后于进度条,那这样的话我们可以考虑给他加一个loading状态提示数据正在处理中,从而更好的提升用户体验.

各位大佬你们有什么对于实施进度条的新方法或者更合适的解决方案吗,求指导!!!文章来源地址https://www.toymoban.com/news/detail-701184.html

到了这里,关于前端实现真实可动态变化进度条,axios+ Ant Design Vue实现.的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Ant-Design-Pro-V5: ProTable前端导出excel表格。

    Prtable表格中根据搜索条件实现excel表格导出。 代码展示: index.jsx 数据字典格式返回: 以 teacherTypeObj 为例 向services.js中 lecturerExportExcel 方法中传入的格式为: services.js中 lecturerExportExcel 导出方法: utils 中 paramsFilter 方法:过滤无用参数

    2024年02月09日
    浏览(44)
  • vue3 组合式 ant.design组件Table嵌套表格,从后端获取数据并动态渲染

    在根据官方文档使用ant.design中的嵌套表格时,发现官方文档很多地方都不够详细。在过程中踩了不少坑,例如: 子表如何获取父表的数据? 如何获取子表的行索引? 如何让子表的数据源来自父表该行的数据? 总之,最后还是磕磕绊绊做完了功能,于是第一时间把代码整理

    2024年02月15日
    浏览(44)
  • SpringBoot + Ant Design Vue实现数据导出功能

    以xlsx格式导出所选表格中的内容 要求进行分级 设置表头颜色。 首先我们需要添加一个用于到导出的按钮上去,像这样的: 至于它放哪里,是什么样式可以根据自己的需求决定。 按钮有了,下来我们开始实现这个按钮的功能。 导出数据确定。 表格设置: 表头添加以下代码

    2024年02月10日
    浏览(47)
  • Ant Design Vue实现表格双击编辑、添加新行、文字提示

    早上刚上班,产品就朝我工位走了过来,一看大事不好,肯定又是来提需求的! 产品:做一个表格,要实现双击编辑的功能 我:做不了 产品:老板提的 我:好的,可以做 老板提的不能做也滴做😂 申明:项目基于Vue+Ant Design实现 想要实现双击编辑单元格,先开发一个简单的

    2024年02月11日
    浏览(47)
  • vue3 + Ant Design 实现双表头表格(横向表头+纵向表头)

     一、要实现的效果( 纵向固定表头的表格,横向表头数量动态化 ) 二、这是后台返回的数据格式(以企业为数组,每个企业里有个站点数组pointFactors)   三、代码实现步骤   (1)定义纵向固定表头 (2)动态生成横向表头( 从接口获取数据 )   (3)循环原始数据,生

    2024年02月04日
    浏览(50)
  • ant-design-vue中upload上传图片、视频实现预览功能

    有没有小伙伴在使用ant-design-vue的upload组件时,发现api文档在图片预览功能的介绍寥寥无几,而且也没提供视频预览的demo,在实际开发中碰到相应的需求直挠头~~~~,别急,下面来给大家分享一个我自己封装的upload组件,符合需求可以直接在项目中放到组件目录调用。 templat

    2024年02月12日
    浏览(45)
  • react ant-design实现导航菜单menu的路由设置/切换页面

    ant-design版本是5.1.1,路由版本是v6的 新版本的导航菜单路由设置与旧版的不太一样,刚开始的时候甚至不知道该怎么写 实现效果: 代码: 首先,给导航菜单的menu添加点击事件 修改item,通过设置点击事件获取点击后的key值(key值即路由跳转的页面) 打印出来看看 获取到的

    2024年02月12日
    浏览(57)
  • 【ant-design-vue】实现table的拖拽排序(拖拽行和伸缩列):

    1.效果: 拖拽前: 拖拽后: 2.实现: 3.出现的问题: 4.初始拖拽版本: 5.相关知识:

    2024年02月12日
    浏览(40)
  • ant.design 组件库中的 Tree 组件实现可搜索的树: React+and+ts

    ant.design 组件库中的 Tree 组件实现可搜索的树,在这里我会详细介绍每个方法,以及容易踩坑的点。 效果图: 下面是要渲染在 Tree 上的的数据,这是一个伪数据,如果你在开发时使用,直接修改给对应的变量名,赋值即可 这个方法是 Tree 组件提供的,用来筛选出要渲染的数

    2024年02月14日
    浏览(37)
  • 使用Axios中的onUploadProgress实现显示文件上传进度

    onUploadProgress 是 Axios 这个 JavaScript 库中用于处理 HTTP 请求的一个配置选项之一。Axios 是一个基于 Promise 的 HTTP 客户端,用于在浏览器和 Node.js 中进行 HTTP 请求。 onUploadProgress 允许指定一个回调函数,在上传进度发生变化时被调用。这个回调函数接收一个进度事件对象作为参数

    2024年02月10日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包