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 相关文章推荐
PHP PDO操作总结
Nov 17 Javascript
js限制文本框的输入内容代码分享(3类)
Aug 20 Javascript
jQuery的事件预绑定
Dec 05 Javascript
node.js中grunt和gulp的区别详解
Jul 17 Javascript
Node.js 使用递归实现遍历文件夹中所有文件
Sep 18 Javascript
Vue 2.0学习笔记之Vue中的computed属性
Oct 16 Javascript
vue源码解析之事件机制原理
Apr 21 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
Aug 31 Javascript
为vue项目自动设置请求状态的配置方法
Jun 09 Javascript
vuex 实现getter值赋值给vue组件里的data示例
Nov 05 Javascript
vue实现点击按钮切换背景颜色的示例代码
Jun 23 Javascript
vue data变量相互赋值后被实时同步的解决步骤
Aug 05 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
全国FM电台频率大全 - 13 福建省
2020/03/11 无线电
WampServer搭建php环境时遇到的问题汇总
2015/07/23 PHP
JavaScript触发器详解
2007/03/10 Javascript
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
jQuery学习笔记 操作jQuery对象 文档处理
2012/09/19 Javascript
checkbox使用示例
2013/08/23 Javascript
JS实现双击编辑可修改状态的方法
2015/08/14 Javascript
jquery实现图片预加载
2015/12/25 Javascript
jQuery事件对象总结
2016/10/17 Javascript
扩展jquery easyui tree的搜索树节点方法(推荐)
2016/10/28 Javascript
JS作用域闭包、预解释和this关键字综合实例解析
2016/12/16 Javascript
原生js实现焦点轮播图效果
2017/01/12 Javascript
JavaScript 详解预编译原理
2017/01/22 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
在Node.js下运用MQTT协议实现即时通讯及离线推送的方法
2019/01/24 Javascript
Vue传参一箩筐(页面、组件)
2019/04/04 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
2019/07/04 jQuery
讲解Python中fileno()方法的使用
2015/05/24 Python
python使用tornado实现简单爬虫
2018/07/28 Python
python合并已经存在的sheet数据到新sheet的方法
2018/12/11 Python
python3实现zabbix告警推送钉钉的示例
2019/02/20 Python
总结Python图形用户界面和游戏开发知识点
2019/05/22 Python
Django中celery执行任务结果的保存方法
2019/07/12 Python
python中numpy数组与list相互转换实例方法
2021/01/29 Python
100%羊绒:NakedCashmere
2020/08/26 全球购物
房地产销售经理岗位职责
2014/01/01 职场文书
教师档案管理制度
2014/01/23 职场文书
空乘英文求职信
2014/04/13 职场文书
关于中国梦的演讲稿
2014/04/23 职场文书
试用期转正后的自我评价
2014/09/21 职场文书
国庆节新闻稿
2015/07/17 职场文书
职场新人刚入职工作总结该怎么写?
2019/05/15 职场文书
南阳市白酒市场的调查报告
2019/11/08 职场文书
MySQL分区表实现按月份归类
2021/11/01 MySQL
Spring 使用注解开发
2022/05/20 Java/Android
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技