vue中element 上传功能的实现思路


Posted in Javascript onJuly 06, 2018

element 的上传功能

最近有个需求,需要在上传文件前,可以进行弹窗控制是否上传 upload

看完文档后,感觉有两种思路可以实现

before-upload
auto-upload, on-change

before-upload

初始代码

// template
<el-upload 
 class="avatar-uploader" 
 action="https://jsonplaceholder.typicode.com/posts/" 
 :show-file-list="false" 
 :on-success="handleAvatarSuccess" 
 :before-upload="beforeAvatarUpload">
 <img v-if="imageUrl" :src="imageUrl" class="avatar">
 <i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
// javscript
data() {
 return {
  imageUrl: ""
 };
 },
 methods: {
 handleAvatarSuccess(res, file) {
  this.imageUrl = URL.createObjectURL(file.raw);
 },
 beforeAvatarUpload(file) {
  // 文件类型进行判断 
  const isJPG = file.type === "image/jpeg";
  const isLt2M = file.size / 1024 / 1024 < 2;
  if (!isJPG) {
  this.$message.error("上传头像图片只能是 JPG 格式!");
  }
  if (!isLt2M) {
  this.$message.error("上传头像图片大小不能超过 2MB!");
  }
  return isJPG && isLt2M;
 }
 }

初始效果图

vue中element 上传功能的实现思路 

考虑在before-upload中进行弹窗后, return false | reject() 即可

修改代码

由于 this.$confirm 是异步操作,因而需要等待其结果才能进行下一步操作

async beforeAvatarUpload(file) {
  const isSubmit = await this.$confirm('此操作将上传文件, 是否继续?', '提示', {
   confirmButtonText: '确定',
   cancelButtonText: '取消',
   type: 'warning'
  }).then(() => {
   return true
  }).catch(() => { 
   return false  
  });
  console.log(isSubmit)
  return isSubmit;
 }

确认提交和取消提交 ==> 结果却一样

确认提交

vue中element 上传功能的实现思路 

取消提交

vue中element 上传功能的实现思路 

结果却不可以,因而考虑另一种思路了, before-upload 只是进行判断文件是否适合,从而是否上否上传到服务器,而不是用来等待用户进行操作使用的

手动上传

auto-upload
on-change
// template
<el-upload 
 ref="upload"
 class="upload-demo" 
 action="https://jsonplaceholder.typicode.com/posts/" 
 :on-preview="handlePreview" 
 :limit="1" 
 :auto-upload="false"
 :on-change="handleChange"
 :show-file-list="true" 
 :file-list="fileList"
 :on-error="handleError"
 :on-success="handleSuccess">
 <el-button size="small" type="primary">点击上传</el-button>
</el-upload>
// js
data() {
return {
 fileList: [
 ],
 bool: true
 }
},
methods: {
 handleRemove(file, fileList) {
 console.log(file, fileList);
 },
 handlePreview(file) {
 console.log(file);
 },
 handleError(err, file) {
  alert('失败')
  this.fileList = []
 },
 handleSuccess(res, file) {
 alert('成功')
 this.fileList = []
 },
 handleExceed(files, fileList) {},
 async handleChange() {
 const isSubmit = await this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
  confirmButtonText: '确定',
  cancelButtonText: '取消',
  type: 'warning'
 }).then(() => {
  return false
 }).catch(() => { 
  return true  
 });
 if (isSubmit) {
  this.$refs.upload.submit() 
 } else {
  this.fileList = []
 }
 } 
}

确认提交

vue中element 上传功能的实现思路 

取消提交

vue中element 上传功能的实现思路 

此方法可行,现在就是控制因为文件状态改变而导致两次弹窗, 修改如下

文件状态变更 不是成功就是失败,因而在成功失败的函数进行控制即可

添加flag标识进行控制弹窗即可

data() {
 return {
 isConfirm: true
 }
}
async handleChange() {
 if (!this.isConfirm) {
 this.isConfirm = true
 return
 }
 const bo = await this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
 confirmButtonText: '确定',
 cancelButtonText: '取消',
 type: 'warning'
 }).then(() => {
 return false
 }).catch(() => { 
 return true  
 })
 if (bo) {
 this.$refs.upload.submit()
 this.isConfirm = false
 } else {
 this.fileList = []
 }
}

修改后便可以了,只是注意 在 on-error 和 on-succes 中注意清空 fileList = [] ,这样还可以重新添加文件

确定上传

vue中element 上传功能的实现思路 

取消上传

vue中element 上传功能的实现思路 

总结

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

Javascript 相关文章推荐
又一个图片自动缩小的JS代码
Mar 10 Javascript
jquery的$(document).ready()和onload的加载顺序
May 26 Javascript
javascript淡入淡出效果的实现思路
Mar 31 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
Apr 07 Javascript
关于JavaScript命名空间的一些心得
Jun 07 Javascript
node.js中的events.emitter.removeAllListeners方法使用说明
Dec 10 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
Nov 17 Javascript
JavaScript事件对象event用法分析
Jul 27 Javascript
React 无状态组件(Stateless Component) 与高阶组件
Aug 14 Javascript
jQuery实现轮播图及其原理详解
Apr 12 jQuery
jquery获取并修改触发事件的DOM元素示例【基于target 属性】
Oct 10 jQuery
如何利用js在两个html窗口间通信
Apr 27 Javascript
vue 组件中添加样式不生效的解决方法
Jul 06 #Javascript
vue实现动态添加数据滚动条自动滚动到底部的示例代码
Jul 06 #Javascript
微信小程序利用canvas 绘制幸运大转盘功能
Jul 06 #Javascript
用Node提供静态文件服务的方法
Jul 06 #Javascript
vue使用监听实现全选反选功能
Jul 06 #Javascript
vue 实现数字滚动增加效果的实例代码
Jul 06 #Javascript
详解在Vue中使用TypeScript的一些思考(实践)
Jul 06 #Javascript
You might like
php图片加水印原理(超简单的实例代码)
2013/01/18 PHP
Swoole-1.7.22 版本已发布,修复PHP7相关问题
2015/12/31 PHP
再谈PHP中单双引号的区别详解
2016/06/12 PHP
PHP实现微信提现功能
2018/09/30 PHP
不使用浏览器运行javascript代码的方法
2013/07/24 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
2015/08/12 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
2016/08/18 Javascript
Bootstrap时间选择器datetimepicker和daterangepicker使用实例解析
2016/09/17 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
2016/10/10 Javascript
巧用数组制作图片切换js代码
2016/11/29 Javascript
深入理解Vue.js源码之事件机制
2017/09/27 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
2018/04/21 Javascript
layui文件上传控件带更改后数据传值的方法
2019/09/23 Javascript
vue-router之实现导航切换过渡动画效果
2019/10/31 Javascript
在centos7中分布式部署pyspider
2017/05/03 Python
Python中用post、get方式提交数据的方法示例
2017/09/22 Python
django中forms组件的使用与注意
2019/07/08 Python
python 实现检验33品种数据是否是正态分布
2019/12/09 Python
Python super()方法原理详解
2020/03/31 Python
Window10上Tensorflow的安装(CPU和GPU版本)
2020/12/15 Python
css3使网页、图片变成灰色兼容大多数浏览器
2014/07/02 HTML / CSS
介绍下Lucene建立索引的过程
2016/03/02 面试题
房产销售经理职责
2013/12/20 职场文书
会计人员岗位职责
2014/03/19 职场文书
论文指导教师评语
2014/04/28 职场文书
学习十八大的心得体会
2014/09/01 职场文书
离婚协议书范本(通用篇)
2014/11/30 职场文书
优秀班主任主要事迹材料
2014/12/16 职场文书
家长会开场白和结束语
2015/05/29 职场文书
2015年电气技术员工作总结
2015/07/24 职场文书
保护环境建议书作文500字
2015/09/14 职场文书
志愿者工作心得体会
2016/01/15 职场文书
golang goroutine顺序输出方式
2021/04/29 Golang
源码解读Spring-Integration执行过程
2021/06/11 Java/Android
Python如何使用循环结构和分支结构
2022/04/13 Python