• 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',点击删除按钮就会弹一个提示框,确定才会走删除流程,否则框消失。

    ​ 成功!

  • 相关阅读:
    GIS开发站点收藏
    读取Excel中的数据到DataSet
    SPSS统计功能与模块对照表
    相关性分析主要源码
    Matlab典型论坛
    EasyUI入门视频教程
    利用EF ORM Mysql实体运行程序出错解决方案
    小议
    六、 从Controller中访问模板数据(ASP.NET MVC5 系列)
    五、 创建连接串连接本地数据库(ASP.NET MVC5 系列)
  • 原文地址:https://www.cnblogs.com/QH-Jimmy/p/7773578.html
Copyright © 2020-2023  润新知