el-upload源码跳坑2
产品又加了一个需求,要求删除图片时候弹一个提示框,如果确定就直接发请求从服务器删除图片
一开始想的比较简单,直接在on-remove的钩子函数上做弹框提示,如果取消就撤销,代码如下:
<el-upload :on-remove='remove'></el-upload>
remove:function(){
this.$confirm('此操作将永久删除图片, 是否继续?', '提示', {
// ...若干处理代码
}
}
并不行,在我点下删除按钮的一瞬间,图片就消失了,接着才弹框。
跑去看源码,才发现里面的逻辑是这样的:
<!-- upload-list.vue -->
<span v-if="!disabled" class="el-upload-list__item-delete" @click="$emit('remove', file)"></span>
<!-- index.vue -->
<UploadList ... on-remove={this.handleRemove}</UploadList>
handleRemove(file, raw) {
if (raw) {
file = this.getFile(raw);
}
this.abort(file);
let fileList = this.uploadFiles;
// 先从fileList删除图片
fileList.splice(fileList.indexOf(file), 1);
// 再触发remove事件
this.onRemove(file, fileList);
}
这样子就明白了,想在图片删除(消失)前出框只能撸源码了。
由于element-ui有自带的弹框组件,所以如果能在源码直接嵌入组件那就最好了,于是我在handleRemove中打印了一下this,显示为VueComponent,与我写的vue文件的this一样,所以方法可以直接用,那就太方便了。
修改后,源码如下:
// index.vue
// 首先添加一个变量来控制这个功能
jimmyRemoveTip: {
type: Boolean,
default: false
}
// 根据变量控制流程
handleRemove(file, raw) {
// 添加的确认环节
if (this.jimmyRemoveTip) {
this.$confirm('此操作将永久删除图片, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
// ...删除图片
}).catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
});
});
}else {
// 正常流程
}
}
(语法检查真是严格,else前后,大括号前必须有空格)
这样,只要在组件传一个:jimmyRemoveTip='true',点击删除按钮就会弹一个提示框,确定才会走删除流程,否则框消失。

成功!
el-upload源码跳坑2的更多相关文章
- maven常用插件: 打包源码 / 跳过测试 / 单独打包依赖项
一.指定编译文件的编码 maven-compile-plugin <plugin> <groupId>org.apache.maven.plugins</groupId& ...
- vim中c/c++源码跳转
在使用vim阅读c/c++代码的时候,代码跳转很重要, 在学习redis代码的时候遇到这个问题. 网上查找之后通过实践发现cscope比较好用,可以很方便的实现跳转 1. 安装cscope sudo ...
- 【Android初级】如何动态添加菜单项(附源码+避坑)
我们平时在开发过程中,为了灵活多变,除了使用静态的菜单,还有动态添加菜单的需求.今天要分享的功能如下: 在界面的右上角有个更多选项,点开后,有两个子菜单:关于和退出 点击"关于", ...
- ubuntu14.04编译mono源码(有坑...)
从github上下载了mono的源码,然后打算编译了.百度了一下教程,我去...居然没有教程.换bing搜索一下,我去...还是没有.关键字换一下:how to build mono on linu ...
- mac openresty 源码安装 坑
下载openresty源码安装 下载页面http://openresty.org/cn/download.html 下载上一个版本的稳定版 https://openresty.org/download ...
- ubuntu编译python源码的坑
在linux平台下编译python时只需要3条命令. 编译步骤 在github或https://www.python.org/downloads/中下载python源码 解压压缩包进路目录执行 1. ...
- 配置使用sourcemap调试vue源码爬坑
环境: Google Chrome V72.0.3626.109 vue-dev V 2.6.10 爬坑的乐趣就不说了(我恨啊),以下说一下出坑要点 1. 在vue-dev的package.json ...
- python2.7源码或第三方包里埋藏的坑(持续更新)
1.psutil包,aix环境下,如果进程命令过长的话,程序无法取得完整的进程命令,测试代码如下 import psutil proc=psutil.Process(11534558) pidDict ...
- Android -- 带你从源码角度领悟Dagger2入门到放弃
1,以前的博客也写了两篇关于Dagger2,但是感觉自己使用的时候还是云里雾里的,更不谈各位来看博客的同学了,所以今天打算和大家再一次的入坑试试,最后一次了,保证最后一次了. 2,接入项目 在项目的G ...
随机推荐
- Event Tracing For Windows
https://blogs.msdn.microsoft.com/oanapl/2009/08/04/etw-event-tracing-for-windows-what-it-is-and-usef ...
- C#爬取京东手机数据+PowerBI数据可视化展示
此系列博文链接 C#爬虫基本知识 Html Agility Pack解析html TODO: EF6中基本认识. EF6操作mysql MySQL乱码问题 C#爬虫 在开头贴一下github仓库地址, ...
- Spring Boot切换为APR模式
Spring Boot内置了tomcat容器,直接运行Application就可以启动web服务器. 在tomcat中提供了三种方式:BIO.NIO.APR. BIO tomcat7以下的版本都是BI ...
- Spring Boot中使用Redis数据库
引入依赖 Spring Boot提供的数据访问框架Spring Data Redis基于Jedis.可以通过引入spring-boot-starter-redis来配置依赖关系. <depend ...
- jquery中ajax的几种方式
三种简写: $.get(URL,data,function(data,status,xhr),dataType) $(selector).post(URL,data,function(data,sta ...
- WebSocket集成XMPP网页即时通讯3:二进制文件收发
WebSocket支持二进制的发送,见jetty官网: http://www.eclipse.org/jetty/documentation/current/jetty-websocket-api-s ...
- django 之 发送邮箱
发送邮箱的话首先在settings文件里写下边的这些设置: #邮件服务配置文件 SSL认证,验证 EMAIL_USE_SSL = True #邮箱服务 EMAIL_HOST = 'smtp.qq.co ...
- 1-1 Vue的介绍
简单介绍Vue Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易 ...
- vue教程3-03 vue组件,定义全局、局部组件,配合模板,动态组件
vue教程3-03 vue组件,定义全局.局部组件,配合模板,动态组件 一.定义一个组件 定义一个组件: 1. 全局组件 var Aaa=Vue.extend({ template:'<h3&g ...
- javascript数据结构与算法---二叉树(删除节点)
javascript数据结构与算法---二叉树(删除节点) function Node(data,left,right) { this.data = data; this.left = left; t ...