vue使用axios实现文件上传进度的实时更新详解


Posted in Javascript onDecember 20, 2017

axios 简介

axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它本身具有以下特征:

  • 从浏览器中创建 XMLHttpRequest
  • 从 node.js 发出 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求和响应数据
  • 取消请求
  • 自动转换JSON数据
  • 客户端支持防止 CSRF/XSRF

引入方式:

$ npm install axios
//使用淘宝源
$ cnpm install axios
//或者使用cdn:
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

安装其他插件的时候,可以直接在 main.js 中引入并使用 Vue.use()来注册,但是 axios并不是vue插件,所以不能 使用Vue.use() ,所以只能在每个需要发送请求的组件中即时引入。

为了解决这个问题,我们在引入 axios 之后,通过修改原型链,来更方便的使用。

//main.js

import axios from 'axios'
Vue.prototype.$http = axios

在 main.js 中添加了这两行代码之后,就能直接在组件的 methods 中使用 $http命令

methods: {
postData () {
this.$http({
method: 'post',
url: '/user',
data: {
name: 'xiaoming',
info: '12'
}
})
}

更多的基础知识大家可以参考这篇文章:https://3water.com/article/110324.htm

vue使用axios实现文件上传进度实时更新

XHR二级增加了progress事件,我们可以据此在浏览器接收新数据期间添加实时数据进度条,从而使得交互更加友好

vue模板

<div class="progress" @click="upload"
   :style="{backgroundImage:'linear-gradient(to right,#C0C7CB 0%,#C0C7CB '+progress+',#E1E6E9 '+progress+',#E1E6E9 100%)'}">

vue-js

var form = new FormData()
 form.append('file', vm.$refs.upload.files[0])
 form.append('id', id)
 form.append('type', type)
 var config = {
  onUploadProgress: progressEvent => {
   var complete = (progressEvent.loaded / progressEvent.total * 100 | 0) + '%'
   this.progress = complete
  }
 }
 axios.post(`api/uploadFile`,
  form, config).then((res) => {
  if (res.data.status === 'success') {
   console.log('上传成功')
  }
 })

关键点在于progress事件,而axios对ajax封装之后需要在axios的config参数里面写好事件处理函数(具体参数写法可查看axios文档)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JS网络游戏-(模拟城市webgame)提供的一些例子下载
Oct 14 Javascript
基于jquery的回到页面顶部按钮
Jun 27 Javascript
详细解读JavaScript的跨浏览器事件处理
Aug 12 Javascript
jQuery插件实现多级联动菜单效果
Dec 01 Javascript
js判断图片加载完成后获取图片实际宽高的方法
Feb 25 Javascript
JavaScript常用本地对象小结
Mar 28 Javascript
JS中检测数据类型的几种方式及优缺点小结
Dec 12 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
Dec 23 Javascript
Angularjs单选改为多选的开发过程及问题解析
Feb 17 Javascript
React Native react-navigation 导航使用详解
Dec 01 Javascript
JavaScript canvas动画实现时钟效果
Feb 10 Javascript
JSON获取属性值方法代码实例
Jun 30 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
Dec 20 #Javascript
详解JS模块导入导出
Dec 20 #Javascript
vue实现样式之间的切换及vue动态样式的实现方法
Dec 19 #Javascript
vue+vuex+axios+echarts画一个动态更新的中国地图的方法
Dec 19 #Javascript
常用的9个JavaScript图表库详解
Dec 19 #Javascript
完美解决手机网页中输入框被输入法遮挡的问题
Dec 19 #Javascript
js解决软键盘遮挡输入框的问题分享
Dec 19 #Javascript
You might like
提问的智慧(2)
2006/10/09 PHP
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
2013/04/08 PHP
php抽奖小程序的实现代码
2013/06/18 PHP
PHP获取本周第一天和最后一天示例代码
2014/02/24 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
js的event详解。
2006/09/06 Javascript
IE Firefox 使用自定义标签的区别
2009/10/15 Javascript
javascript prototype原型操作笔记
2009/12/07 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
js原型链与继承解析(初体验)
2016/05/09 Javascript
javascript显示倒计时控制按钮的简单实现
2016/06/07 Javascript
HTML页面定时跳转方法解析(2种任选)
2016/12/22 Javascript
微信小程序 Nginx环境配置详细介绍
2017/02/14 Javascript
微信小程序之购物车功能
2020/09/23 Javascript
对vue.js中this.$emit的深入理解
2018/02/23 Javascript
vue.js学习笔记之v-bind和v-on解析
2018/05/03 Javascript
快速解决brew安装特定版本flow的问题
2018/05/17 Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
2018/10/19 Javascript
JS计算两个数组的交集、差集、并集、补集(多种实现方式)
2019/05/21 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
vue框架中props的typescript用法详解
2020/02/17 Javascript
Django之Mode的外键自关联和引用未定义的Model方法
2018/12/15 Python
Django中使用haystack+whoosh实现搜索功能
2019/10/08 Python
python将时分秒转换成秒的实例
2019/12/07 Python
Python中使用gflags实例及原理解析
2019/12/13 Python
pytorch数据预处理错误的解决
2020/02/20 Python
python将logging模块封装成单独模块并实现动态切换Level方式
2020/05/12 Python
为什么相对PHP黑python的更少
2020/06/21 Python
Gloeilampgoedkoop荷兰:在线购买灯泡
2019/02/16 全球购物
美国克罗格超市在线购物:Kroger
2019/06/21 全球购物
主持人演讲稿范文
2013/12/28 职场文书
汽车技术服务英文求职信范文
2014/01/02 职场文书
八年级历史教学反思
2014/01/10 职场文书
《英英学古诗》教学反思
2014/04/11 职场文书
八月一日观后感
2015/06/10 职场文书
HttpClient实现文件上传功能
2022/08/14 Java/Android