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 相关文章推荐
Jquery 插件学习实例1 插件制作说明与tableUI优化
Apr 02 Javascript
JS遮罩层效果 兼容ie firefox jQuery遮罩层
Jul 26 Javascript
asm.js使用示例代码
Nov 28 Javascript
js模拟淘宝网的多级选择菜单实现方法
Aug 18 Javascript
详解javascript new的运行机制
Jan 26 Javascript
详解JavaScript的AngularJS框架中的作用域与数据绑定
Mar 04 Javascript
jQuery表单验证插件解析(推荐)
Jul 21 Javascript
javascript汉字拼音互转的简单实例
Oct 09 Javascript
javascript另类方法实现htmlencode()与htmldecode()函数实例分析
Nov 17 Javascript
分享一个精简的vue.js 图片lazyload插件实例
Mar 13 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
Dec 22 Javascript
微信小程序上传文件到阿里OSS教程
May 20 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相关资料
2006/10/09 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
php使用session二维数组实例
2014/11/06 PHP
PHP关联数组实现根据元素值删除元素的方法
2015/06/26 PHP
PHP实现带重试功能的curl连接示例
2016/07/28 PHP
利用php操作memcache缓存的基础方法示例
2017/08/02 PHP
php curl优化下载微信头像的方法总结
2018/09/07 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
提高 DHTML 页面性能
2006/12/25 Javascript
JQuery 中几个类选择器的简单使用介绍
2013/03/14 Javascript
javascript事件冒泡详解和捕获、阻止方法
2014/04/12 Javascript
jQuery中live()方法用法实例
2015/01/19 Javascript
微信小程序 教程之注册程序
2016/10/17 Javascript
JavaScript数据结构之二叉树的查找算法示例
2017/04/13 Javascript
Vue中v-for的数据分组实例
2018/03/07 Javascript
jQuery轮播图实例详解
2018/08/15 jQuery
[02:10]DOTA2 TI10勇士令状玩法及不朽Ⅰ展示:焕新世界,如你所期
2020/05/29 DOTA
用TensorFlow实现多类支持向量机的示例代码
2018/04/28 Python
Python中的TCP socket写法示例
2018/05/11 Python
python实现超简单的视频对象提取功能
2018/06/04 Python
Python爬虫之正则表达式基本用法实例分析
2018/08/08 Python
分享PyCharm的几个使用技巧
2019/11/10 Python
学生如何注册Pycharm专业版以及pycharm的安装
2020/09/24 Python
html5自动播放mov格式视频的实例代码
2020/01/14 HTML / CSS
英国舒适型鞋履品牌:FitFlop
2017/05/17 全球购物
CHARLES & KEITH澳大利亚官网:新加坡时尚品牌
2019/01/22 全球购物
Java如何支持I18N?
2016/10/31 面试题
十佳青年个人事迹材料
2014/01/28 职场文书
中班中秋节活动反思
2014/02/18 职场文书
年会搞笑主持词串词
2014/03/24 职场文书
春节联欢晚会主持词
2014/03/24 职场文书
图书馆志愿者活动总结
2014/06/27 职场文书
合伙购房协议样本
2014/10/06 职场文书
情人节活动总结范文
2015/02/05 职场文书
酒店厨房管理制度
2015/08/06 职场文书
Oracle 临时表空间SQL语句的实现
2021/09/25 Oracle