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 相关文章推荐
JS 自动完成 AutoComplete(Ajax 查询)
Jul 07 Javascript
从零开始学习jQuery (十) jQueryUI常用功能实战
Feb 23 Javascript
关于JavaScript中原型继承中的一点思考
Jul 25 Javascript
javascript简单实现类似QQ头像弹出效果的方法
Aug 03 Javascript
使用jquery插件qrcode生成二维码
Oct 22 Javascript
js-FCC算法-No repeats please字符串的全排列(详解)
May 02 Javascript
详解layui弹窗父子窗口之间传参数的方法
Jan 16 Javascript
详解处理bootstrap4不支持远程静态框问题
Jul 20 Javascript
小程序登录/注册页面设计的实现代码
May 24 Javascript
vue项目实现设置根据路由高亮对应的菜单项操作
Aug 06 Javascript
vue2.0 watch里面的 deep和immediate用法说明
Oct 30 Javascript
javascript实现电商放大镜效果
Nov 23 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 MYSQL乱码问题,使用SET NAMES utf8校正
2009/11/30 PHP
PHP递归实现文件夹的复制、删除、查看大小操作示例
2017/08/11 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
js本身的局限性 别让javascript做太多事
2010/03/23 Javascript
event.currentTarget与event.target的区别介绍
2012/12/31 Javascript
JS实现图片横向滚动效果示例代码
2013/09/04 Javascript
Node.js中使用socket创建私聊和公聊聊天室
2015/11/19 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
Mvc提交表单的四种方法全程详解
2016/08/10 Javascript
javascript读取文本节点方法小结
2016/12/15 Javascript
angular十大常见问题
2017/03/07 Javascript
Angular 通过注入 $location 获取与修改当前页面URL的实例
2017/05/31 Javascript
详解操作虚拟dom模拟react视图渲染
2018/07/25 Javascript
浅谈Redux中间件的实践
2018/07/27 Javascript
使用Angular-CLI构建NPM包的方法
2018/09/07 Javascript
ios设备中angularjs无法改变页面title的解决方法
2018/09/13 Javascript
vue车牌号校验和银行校验实战
2019/01/23 Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
2019/05/13 Javascript
如何实现一个简易版的vuex持久化工具
2019/09/11 Javascript
微信小程序实用代码段(收藏版)
2019/12/17 Javascript
在python中的socket模块使用代理实例
2014/05/29 Python
Python的自动化部署模块Fabric的安装及使用指南
2016/01/19 Python
python3中bytes和string之间的互相转换
2017/02/09 Python
python微信跳一跳系列之自动计算跳一跳距离
2018/02/26 Python
使用Python来开发微信功能
2018/06/13 Python
pandas 快速处理 date_time 日期格式方法
2018/11/12 Python
Python OOP类中的几种函数或方法总结
2019/02/22 Python
python如何写个俄罗斯方块
2020/11/06 Python
html5 Canvas画图教程(11)—使用lineTo/arc/bezierCurveTo画椭圆形
2013/01/09 HTML / CSS
Ibood荷兰:互联网每日最佳在线优惠
2019/02/28 全球购物
eBay加拿大站:eBay.ca
2019/06/20 全球购物
加工操作管理制度
2014/01/19 职场文书
2014年学校安全工作总结
2014/11/13 职场文书
Python爬虫数据的分类及json数据使用小结
2021/03/29 Python
MySQL系列之八 MySQL服务器变量
2021/07/02 MySQL
Java中的继承、多态以及封装
2022/04/11 Java/Android