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 相关文章推荐
JavaScript的类型简单说明
Sep 03 Javascript
Jvascript学习实践案例(开发常用)
Jun 25 Javascript
THREE.JS入门教程(6)创建自己的全景图实现步骤
Jan 25 Javascript
javascript相等运算符与等同运算符详细介绍
Nov 09 Javascript
jQuery拖拽排序插件制作拖拽排序效果(附源码下载)
Feb 23 Javascript
Bootstrap精简教程中秋大放送
Sep 15 Javascript
利用jquery去掉时光轴头尾部线条的方法实例
Jun 16 jQuery
JS匿名函数和匿名自执行函数概念与用法分析
Mar 16 Javascript
Angular5中状态管理的实现
Sep 03 Javascript
详解微信小程序网络请求接口封装实例
May 02 Javascript
一篇文章弄懂javascript中的执行栈与执行上下文
Aug 09 Javascript
前端实现滑动按钮AJAX与后端交互的示例代码
Feb 24 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中数据的批量导入(csv文件)
2006/10/09 PHP
php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
2011/10/31 PHP
Smarty使用自定义资源的方法
2015/08/08 PHP
javascript 写类方式之十
2009/07/05 Javascript
基于jquery的finkyUI插件与Ajax实现页面数据加载功能
2010/12/03 Javascript
javaScript面向对象继承方法经典实现
2013/08/20 Javascript
浅析hasOwnProperty方法的应用
2013/11/20 Javascript
使用js写的一个简易的投票
2013/11/27 Javascript
jquery siblings获取同辈元素用法实例分析
2016/07/25 Javascript
基于原生JS实现图片裁剪
2016/08/01 Javascript
BootStrap 图标icon符号图标glyphicons不正常显示的快速解决办法
2016/12/08 Javascript
JS实现直接运行html代码的方法
2017/03/13 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
angular将html代码输出为内容的实例
2018/09/30 Javascript
Vue核心概念Getter的使用方法
2019/01/18 Javascript
Vue实现开心消消乐游戏算法
2019/10/22 Javascript
详解小程序横屏方案对比
2020/06/28 Javascript
JavaScript TAB栏切换效果的示例
2020/11/05 Javascript
python处理csv数据的方法
2015/03/11 Python
使用Nginx+uWsgi实现Python的Django框架站点动静分离
2016/03/21 Python
对python 多个分隔符split 的实例详解
2018/12/20 Python
Python 控制终端输出文字的实例
2019/07/12 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
2019/08/02 Python
深入浅析Python 中的sklearn模型选择
2019/10/12 Python
django之从html页面表单获取输入的数据实例
2020/03/16 Python
W3C公布最新的HTML5标准草案
2008/10/17 HTML / CSS
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
瑞贝卡·明可弗包包官网:Rebecca Minkoff
2016/07/21 全球购物
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
英国景点门票网站:attractiontix
2019/08/27 全球购物
涉外文秘个人求职的自我评价
2013/10/07 职场文书
毕业生找工作的自我评价
2013/10/18 职场文书
便利店促销方案
2014/02/20 职场文书
安全在我心中演讲稿
2014/09/01 职场文书
了解Redis常见应用场景
2021/06/23 Redis