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实现iframe动态调整高度的代码
Jan 06 Javascript
javascript 硬盘序列号+其它硬件信息
Dec 23 Javascript
jquery $(document).ready() 与window.onload的区别
Dec 28 Javascript
jquery Mobile入门—外部链接切换示例代码
Jan 08 Javascript
js自定义select下拉框美化特效
May 12 Javascript
JavaScript的ExtJS框架中数面板TreePanel的使用实例解析
May 21 Javascript
Google 地图API资料整理及详细介绍
Aug 06 Javascript
jQuery多文件异步上传带进度条实例代码
Aug 16 Javascript
详解PHP中pathinfo()函数导致的安全问题
Jan 05 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
Oct 12 Javascript
js类的继承定义与用法分析
Jun 21 Javascript
JavaScript实现动态生成表格
Aug 02 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
在线短消息收发的程序,不用数据库
2006/10/09 PHP
php给每个段落添加空格的方法
2015/03/20 PHP
php生成过去100年下拉列表的方法
2015/07/20 PHP
PHP数组生成XML格式数据的封装类实例
2016/11/10 PHP
Laravel下生成验证码的类
2017/11/15 PHP
thinkphp框架使用JWTtoken的方法详解
2019/10/10 PHP
在IE中调用javascript打开Excel的代码(downmoon原作)
2007/04/02 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
2013/03/20 Javascript
原生js和jquery中有关透明度设置的相关问题
2014/01/08 Javascript
javascript实现图片上传前台页面
2015/08/18 Javascript
jquery表单验证需要做些什么
2015/11/17 Javascript
原生JS实现匀速图片轮播动画
2016/10/18 Javascript
深入理解Javascript中的作用域链和闭包
2017/04/25 Javascript
Angular 4.x 路由快速入门学习
2017/05/03 Javascript
Node.js 回调函数实例详解
2017/07/06 Javascript
安装vue-cli报错 -4058 的解决方法
2017/10/19 Javascript
vue2 中二级路由高亮问题及配置方法
2019/06/10 Javascript
详解mpvue开发微信小程序基础知识
2019/09/23 Javascript
vue项目中常见问题及解决方案(推荐)
2019/10/21 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
jquery实现穿梭框功能
2021/01/19 jQuery
python实现堆栈与队列的方法
2015/01/15 Python
Python读写ini文件的方法
2015/05/28 Python
python opencv 二值化 计算白色像素点的实例
2019/07/03 Python
详解python破解zip文件密码的方法
2020/01/13 Python
解决pycharm中导入自己写的.py函数出错问题
2020/02/12 Python
Python特殊属性property原理及使用方法解析
2020/10/09 Python
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
加拿大城市本地限时优惠:Buytopia.ca
2018/09/19 全球购物
会计应聘求职信范文
2013/12/17 职场文书
小学生家长评语集锦
2014/01/30 职场文书
实习生工作证明范本
2014/09/14 职场文书
铁路安全反思材料
2014/12/24 职场文书
给女朋友道歉的话大全
2015/01/20 职场文书
2015年班主任个人工作总结
2015/03/31 职场文书
军训阅兵新闻稿
2015/07/17 职场文书