vue iView 上传组件之手动上传功能


Posted in Javascript onMarch 16, 2018

基于 Vue 的 UI 组件库现在已经有很多了,尤其是移动端的。现在又多了一个 iView 。

iView 主要服务于 PC 界面的中后台业务,是一套高质量的开源 UI 组件库,先上地址:

https://github.com/iview/iview

官网是:

https://www.iviewui.com/

特性

  • 使用单文件的 Vue 组件化开发模式
  • 基于 npm + webpack + babel 开发,支持 ES2015
  • 高质量、功能丰富
  • 友好的 API ,自由灵活地使用空间
  • 详细、友好的文档,事无巨细

最近做一个后台系统用的功能 总结下遇见的问题

功能需求点

  • 上传选择文件 判断文件格式
  • 保存需要上传的文件,展示文件名
  • 提供删除文件功能(未上传前)
  • 上传文件

iView 提供的上传组件

<Upload
 multiple
 ref="upload"
 :before-upload="handleUpload"
 :show-upload-list="false"
 :on-success="uploadSuccess"
 action="//jsonplaceholder.typicode.com/posts/">
 <Button type="ghost" icon="ios-cloud-upload-outline">浏览</Button>
</Upload>
<div v-for="(item, index) in file">Upload file: {{ item.name }} 
 <a href="javascript:;" rel="external nofollow" @click="delectFile(item.name)">X</a>
 <Button style="margin-left:30px;"
  size="small"
  v-if="index === 0"
![](https://user-gold-cdn.xitu.io/2018/3/14/16223a8c12c38be9?w=649&h=743&f=png&s=55740)
  type="primary"
  @click="upload"
  :loading="loadingStatus">上传</Button>
</div>

用到的API参数 / 方法

  • multiple : 是否支持多选文件 默认 false
  • before-upload:上传文件这前的事件钩子,若返回 false 或者 Promise 则停止自动上传
  • show-upload-list: 是否显示已上传文件列表 默认为true
  • on-success: 上传文件成功后的事件钩子,返回 res(接口方返回的信息), file(上传文件), fileList(上传文件List)
  • action: 文件上传地址

上传选择文件 判断文件格式 保存文件

选择文件后会调用方法,在里面做的事情有 判断文件类型是否满足需求,如果满足就保存到需要上传的文件List里,这里我们需要自己定义一个keyID,应为是动上传需要展示,删除功能,如果没有唯一ID不知道删除那个

这里如果允许文件上传了不用但心什么,此钩子会把选择的当数组一样需要调用上文件事件前的钩子事件,所以也不能但心多文件选择只会生成一个KeyID

handleUpload (file) { // 上传文件前的事件钩子
 // 选择文件后 这里判断文件类型 保存文件 自定义一个keyid 值 方便后面删除操作
 let keyID = Math.random().toString().substr(2);
 file['keyID'] = keyID;
 // 保存文件到总展示文件数据里
 this.file.push(file);
 // 保存文件到需要上传的文件数组里
 this.uploadFile.push(file)
 // 返回 falsa 停止自动上传 我们需要手动上传
 return false;
}

删除功能

delectFile (keyID) { // 删除文件
 // 删除总展示文件里的当前文件
 this.file = this.file.filter(item => {
  return item.name != name
 })
 // 删除需要上传文件数据里的当前文件
 this.uploadFile = this.uploadFile.filter(item => {
  return item.KeyID != keyID
 })
}

上传文件

upload () { // 上传文件
 for (let i = 0; i < this.uploadFile.length; i++) {
  let item = this.file[i]
  this.$refs.upload.post(item);
 }
},

这里如果是多文件的时候需要循环上传一个一个来,如果一次上传多个组件会报错,只支持一次上传一个文件,希望iView 以后会支持一次上传多个吧,这个上传我开始一直找不到,不知道手动上传停止自己上传后怎么手动传,找功能找半天,在官方文档里也没有写,官方到是有一个例子手动上传的但:

vue iView 上传组件之手动上传功能 

并没有事实上传的操作 这里也只是模拟啦 上传方法是在源码里找到的

上传成功后

应该我们的上传文件功能和提交整个页面的数据是分开的 所以提交数据的时候需要验证选择文件是否以上传在上传成功事件里让后右把我们传过去的数据返出来做清空待上传文件数组里的数据,提交数据时候只需要判断待上传文件数组是否为空就可以了

文件上传回调返回三个参数

  • res 上传结果 成功与失败 上传之后的地址
  • file 此次上传的文件
uploadSuccess (res, file) { // 文件上传回调 上传成功后删除待上传文件
 console.log(response)
 console.log(file)
},

这里有个小问题 应该上传的时候是循环调用上传的,如果多个文件上传这里会有多个回调结果不能成功一个文件提示用户一次,所以需要处理一下,这里自定义一个数每次回调回来作自增处理,当值与上待上传文件的length 相等时才提示上传结果

完整代码GitHub地址 https://github.com/bailin240/ArticleCode/tree/master/view/iViewUpload

总结

以上所述是小编给大家介绍的vue iView 上传组件之手动上传功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JavaScript中的值是按值传递还是按引用传递问题探讨
Jan 30 Javascript
JS获取元素多层嵌套思路详解
May 16 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
Aug 09 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
Sep 30 Javascript
vue拦截器Vue.http.interceptors.push使用详解
Apr 22 Javascript
详细AngularJs4的图片剪裁组件的实例
Jul 12 Javascript
详谈js中标准for循环与foreach(for in)的区别
Nov 02 Javascript
vue中改变选中当前项的显示隐藏或者状态的实现方法
Feb 08 Javascript
VUE 3D轮播图封装实现方法
Jul 03 Javascript
详解JS中统计函数执行次数与执行时间
Sep 04 Javascript
ES6顶层对象、global对象实例分析
Jun 14 Javascript
layui实现根据table数据判断按钮显示情况的方法
Sep 26 Javascript
p5.js入门教程之平滑过渡(Easing)
Mar 16 #Javascript
JavaScript 隐性类型转换步骤浅析
Mar 15 #Javascript
JavaScript的数据类型转换原则(干货)
Mar 15 #Javascript
p5.js入门教程之小球动画示例代码
Mar 15 #Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
Mar 15 #Javascript
JS实现导出Excel的五种方法详解【附源码下载】
Mar 15 #Javascript
Angularjs Promise实例详解
Mar 15 #Javascript
You might like
PHP跨时区(UTC时间)应用解决方案
2013/01/11 PHP
DLL+ ActiveX控件+WEB页面调用例子
2010/08/07 Javascript
ie下动态加态js文件的方法
2011/09/13 Javascript
jquery实现checkbox 全选/全不选的通用写法
2014/02/22 Javascript
node.js中的http.createServer方法使用说明
2014/12/14 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
基于jquery实现最简单的选项卡切换效果
2016/05/08 Javascript
AngularJS在IE8的不支持的解决方法
2016/05/13 Javascript
Bootstrap零基础学习第一课之模板
2016/07/18 Javascript
jQuery下拉菜单的实现代码
2016/11/03 Javascript
vue v-model表单控件绑定详解
2017/05/17 Javascript
js获取一组日期中最近连续的天数
2017/05/25 Javascript
React利用插件和不用插件实现双向绑定的方法详解
2017/07/03 Javascript
详解vue-cli 2.0配置文件(小结)
2019/01/14 Javascript
node实现socket链接与GPRS进行通信的方法
2019/05/20 Javascript
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
2017/08/31 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
对Python Pexpect 模块的使用说明详解
2019/02/14 Python
Python 函数返回值的示例代码
2019/03/11 Python
python远程连接MySQL数据库
2019/04/19 Python
深入浅析python 协程与go协程的区别
2019/05/09 Python
python使用装饰器作日志处理的方法
2019/07/11 Python
python 实现GUI(图形用户界面)编程详解
2019/07/17 Python
python openvc 裁剪、剪切图片 提取图片的行和列
2019/09/19 Python
Python的in,is和id函数代码实例
2020/04/18 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
2021/01/28 Python
DJI美国:消费类无人机领域的领导者
2018/04/27 全球购物
Android笔试题总结
2014/11/29 面试题
软件生产职位结构化面试主要考察要素及面试题库
2015/06/12 面试题
土木工程建筑专业毕业生求职信
2013/10/21 职场文书
酒店总经理助理岗位职责
2014/02/01 职场文书
毕业生工作求职信
2014/06/30 职场文书
小学校园广播稿集锦
2014/10/04 职场文书
护理实习生带教计划
2015/01/16 职场文书
2019年浪漫婚礼证婚词
2019/06/27 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书