vue中使用el-upload组件修改上传的图片时,每次都会自动闪过上一次的图片

2023-10-26

引言

在进行vue后台管理系统开发的时候又遇到了这个问题,由于上次没有写文章记录,所以还是查看了之前写的项目才解决这个问题。

遇到的问题

我将上传的表单单独作为一个组件(假设为A页面),然后在另外一个页面(假设为B页面)中使用Dialog来显示这个表单。在进行修改操作的时候,A中的数据肯定是需要从B中通过props来进行传输的,然后在A中有一个图片上传的组件,那么这个图片数据肯定也是从B中传过来的。在element提供的el-upload组件中有一个参数:file-list,通过绑定这个参数可以设置其默认显示图片。

问题就出现在这里,如果我将:file-list绑定的参数通过props来进行传递(B传给A),虽然可以做到每次只显示出来我这一张图片,但是每次在打开Dialog的时候,界面会显示出上一次我打开的Dialog的图片,虽然是呈现出一个慢慢消失的效果,而且不影响效果,但是看起来不太美观。

image-20230131150913752

解决方式

我这里限制了上传数量为1

具体操作大概就是如下:

  1. 通过watch监听器去监听prop中传进来的illegalInfoImg参数(这个参数就是存储了图片的地址)
  2. 然后在watch监听器中去进行相关操作(需要判断是否符合条件,然后将illegalInfoImg参数加入到illegalInfoImgFileList中)
  3. 重置表单的时候需要将illegalInfoImg和illegalInfoImgFileList置空
  4. el-upload组件中需要绑定一个on-remove参数,在这里面写入清空illegalInfoImg即可

通过百度,我这里采用了监听器来完成操作,具体代码如下

这是我的el-upload组件

<el-form-item label="违法图片" prop="illegalInfoImg">
      <el-upload :file-list="illegalInfoImgFileList"
                 ref="upload"
                 action=""
                 :headers="illegalInfoImgUploadHeaders"
                 :data="illegalInfoImgUploadData"
                 :http-request="uploadIllegalInfoImg"
                 :before-upload="beforeUpload"
                 :on-remove="handleRemove"
                 accept=".jpg,.jpeg,.png,.JPG,.JPEG"
                 list-type="picture-card"
                 show-file-list
                 :limit="1"> <template
        #default><i class="el-icon-plus"></i></template></el-upload>
    </el-form-item>

这是其相关方法

export default {
  name: 'UpdateIllegalInfoDialog',
  components: {},
  props: {
    formDataProps: {
      illegalInfoId: null,
      illegalInfoImg: null,
      illegalInfoPlace: "",
      illegalActId: "",
      happenTime: null,
      identityCard: "",
      carNumber: "",
      updateBy: null
    }
  },
  data() {
    return {
      formData: this.formDataProps,
      rules: {
        illegalInfoPlace: [{
          required: true,
          message: '字段值不可为空',
        }],
        illegalActId: [{
          required: true,
          message: '字段值不可为空',
        }],
      },
      illegalActIdOptions: [{
        "label": "select 1",
        "value": 1
      }, {
        "label": "select 2",
        "value": 2
      }, {
        "label": "select 3",
        "value": 3
      }],
      illegalInfoImgFileList: [],
      illegalInfoImgUploadHeaders: {},
      illegalInfoImgUploadData: {},
    }
  },
  computed: {
    getIllegalInfoImgFileListLength(){
      return this.illegalInfoImgFileList.length
    }
  },
  watch: {
    'formData.illegalInfoImg':{
      handler(newVal,oldVal){
        // this.albumCoverFileList = [];
        console.log(newVal,oldVal)
        if (oldVal == "" || oldVal == null && this.getIllegalInfoImgFileListLength==0){
          console.log(this.getIllegalInfoImgFileListLength)
          this.illegalInfoImgFileList = [{
            name: 'default',
            url: newVal
          }]
        }
      },
      immediate: true
    }
  },
  created() {
    this.getIllegalActOptions()
  },
  mounted() {},
  methods: {
    async submitForm() {
      let flag = false
      //表单验证,默认通过
      let formValidation = true
      this.$refs['vForm'].validate(valid => {
        if (!valid){
          formValidation = false
        }
        //TODO: 提交表单
      })
      if (formValidation === true){
        //这里需要使用await,否则不会等待该方法运行完成
        await updateIllegalInfo(this.formData).then(res=>{
          this.$message.success("修改成功")
          flag = true
        })
      }
      return flag
    },
    resetForm() {
      this.$refs['vForm'].resetFields()
      this.illegalInfoImgFileList = []
      this.formData.illegalInfoImg=''

    },
    getIllegalActOptions(){
      getIllegalActOptions().then(res =>{
        this.illegalActIdOptions = res.data
      })
    },
    uploadIllegalInfoImg(param){
      console.log('进入了自定义上传')
      // console.log(param.file)
      let formData = new FormData();
      formData.append('file',param.file)
      formData.append('userId',this.$store.getters.userInfo.userId)
      uploadIllegalInfoImg(formData).then(res =>{
        this.formData.illegalInfoImg = res.data
        this.$message.success("上传成功")
      })
    },
    beforeUpload(file) {
      const fileSuffix = file.name.substring(file.name.lastIndexOf(".") + 1);

      const whiteList = ["jpg", "jpeg", "png","JPG","JPEG"];

      if (whiteList.indexOf(fileSuffix) === -1) {
        this.$message.error('上传文件类型不匹配!');
        return false;
      }

      const isLt2M = file.size / 1024 / 1024 < 3;

      if (!isLt2M) {
        this.$message.error('上传文件大小不能超过 3MB');
        return false;
      }
    },
    handleRemove(file, fileList){
      // this.albumCoverFileList = fileList
      this.formData.illegalInfoImg = ''
      // console.log(file, fileList);
      // console.log(this.illegalInfoImgFileList);
      // console.log(fileList.length)
      // console.log(this.illegalInfoImgFileList.length)
    }
  }
}

其中主要相关的是computedwatch中的两个方法,还有resetForm()方法中的清空执行顺序不能变,以及handleRemove()方法中的操作

总结

在解决问题后要及时记录,才能让自己在以后遇到同样问题的时候更快解决

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue中使用el-upload组件修改上传的图片时,每次都会自动闪过上一次的图片 的相关文章

  • 如何删除除任何特定 id 之外的元素

    假设有一个父 id 其中包含许多元素 我想删除除一个元素之外的所有元素 ex parent id children not id n remove
  • JavaScript 添加布尔值

    console log true true 2 console log typeof true true number console log isNaN true true false 为什么两个布尔类型相加会产生一个数字 我有点理解 如
  • 显示具有多个父代的 D3 树

    我目前有this http bl ocks org mbostock 4339083图已实现 我希望在描述具有多个父节点的子节点时保持结构和可折叠性 有没有办法做到这一点 我研究了力图 但我也想保留一组层次结构 这意味着 1 级的父级可以有
  • 在 Internet Explorer 中使用什么来监视 jscript 内存使用情况

    我们正在调试 GWT 应用程序 在 Firefox 中运行正常 在 IE6 0 中开始运行正常 但一段时间后 它就会崩溃并开始爬行 经过一些测试后 我们怀疑存在一些内存问题 使用了太多内存 内存泄漏等 除了使用taskmanager和pro
  • Vue 3 Composition API 提供/注入在单文件组件中不起作用

    我正在使用 Composition API 在 VueJS 3 中创建一个库 我实现了提供 注入 如中所述docs https v3 vuejs org guide composition api provide inject html i
  • 使用 Angular 指令禁用文本选择

    我正在学习 JavaScript 和 AngularJS 我想使用 Angular Directive 禁用文本选择 我有该函数的 JavaScript 代码 function clearSelection if document sele
  • 使用 Node.js 构建网站的最佳实践

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我想知道如何使用 Node js 从头开始 开发一个网站 我明白我怎么能possibly
  • 为什么 window 与 Internet Explorer 中的 window.self 不同?

    关于我如何遇到这个问题有一个复杂的背景故事 但为什么self属性不完全等于窗口本身 在 Safari 和 Firefox 及其朋友中 结果如我所料 gt window window self true gt window window se
  • IntersectionObserver是否支持水平滚动观察?

    我制作了几个垂直滚动 IntersectionObserver 模块 但我对水平滚动感兴趣 根将是 div 观察目标将是 img 我想观察当 img 放大但 div 保持视口宽度时的变化 我什至不确定移动 Safari 是否会将缩放后的图片
  • 按下回车键时不刷新页面

    我遇到了一些问题 只要表单中有输入 回车键就会触发页面刷新 下面的代码 如果按下回车并且文本区域 input 中没有输入任何文本 则不会刷新页面 但是如果按下回车并且 input中有输入或者光标位于文本区域 我不确定是什么触发了它 因为 s
  • 如何使用 Greasemonkey 监视静态 HTML 页面的更改?使用哈希?

    我希望我的 Greasemonkey 脚本仅在其访问的静态页面具有与以前完全相同的内容时运行 现在我可以设置一个包含该页面哈希的变量 我正在寻找一种动态散列页面的方法 以便我可以将我的散列与生成的散列进行比较 关于如何即时实现散列的任何想法
  • javascript 选择自定义光标 (svg)

    我正在动态地将光标更改为悬停时的本地 svg element on mouseover function this css cursor url svgs pointer svg 9 30 auto 工作正常 但我想选择该 svg 来操纵其
  • JavaScript RegEx:不同的结果:使用字符串和使用正则表达式“文字”构建模式?

    使用 RegExp 文字与字符串之间有什么区别吗 http jsfiddle net yMMrk http jsfiddle net yMMrk String prototype lastIndexOf function pattern p
  • 使用 JavaScript 移动页面上的按钮

    我的按钮可以移动 但奇怪的是 我无法弄清楚偏移是否有问题 我希望我的按钮随着鼠标光标移动 但现在它的移动方式不是我想要的 有时它会消失 另外 创建的新按钮是重叠的 我不知道如何解决这个问题并拥有更好的外观 var coorA var coo
  • 表单发布请求并存储收到的数据

    我有一个非常简单的表单 在提交时发出发布请求
  • 如何使用 JavaScript 或 jQuery 克隆 HTML 元素的样式对象?

    我正在尝试克隆元素的样式对象 这应该允许我在更改后重置所述元素的样式 例如 el style left 50px curr style left 50px Modify the elements style The cloned style
  • Google Maps API (v3) 添加/更新标记

    编辑 它现在可以工作 但如果用户不允许或没有基于位置的服务 则不会加载 请参阅 jsfiddle 示例接受的答案评论 我已经浏览了一些教程和问题 但我无法安静地理解正在发生的事情 或者在这种情况下 没有发生 当用户单击链接时 我正在加载地图
  • Rails 3.1+ 的 Jasmine 与 Mocha JavaScript 测试 [已关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我对茉莉花有经验并且非常喜欢它 有谁有 Jasmine 和 Mocha 的经验 特别是 Rails 的经验吗 我想知道是否值得转用 我已经在 J
  • Highcharts jQuery 渲染问题 - 所有浏览器

    我在尝试使用构建堆积柱形图时遇到了一个奇怪的问题高图表 http www highcharts com 当图表呈现时 在您调整浏览器大小之前 不会显示列无论如何 导致图表重绘 我认为 图表的其余部分显示 轴 标题等 但不显示列本身 我在 I
  • 使用velocity.js制作可拖动元素的动画

    我正在使用velocity js 为用户拖动的可拖动 SVG 元素设置动画 然而 velocity js 将先前的 mousemove 坐标排队并通过所有后续的 mousemove 坐标进行动画处理 我想要的是velocity js 不要对

随机推荐

  • c++关键字之volatile

    1 volatile 直接存取原始内存地址 volatile 求助编辑百科名片 volatile 就象大家更熟悉的const一样 volatile是一个类型修饰符 type specifier 它是被设计用来修饰被不同线程访问和修改的变量
  • Maven中央仓库地址

    Maven 中央仓库地址有一下几个 可能这里不全 但一定能够使用 1 http mvnrepository com 属于美化版本 国外网站 在国内可能下载比较慢 2 http repo1 maven org maven2 属于基本版本 查找
  • nodejs之文件下载

    request模块实现下载 app js var express require express var app express 创建express实例 var routes require routes routes js 吧路由引入 代
  • Swin-Transformer-Object-Detection环境搭建训练流程及问题

    一 背景 Swin Transformer Swin代表移位窗口shifted window 可以作为计算机视觉的通用backbone 它的github网址是Swin Transformer 然后它有好几种应用 Getting Starte
  • 古风排版 c语言

    中国的古人写文字 是从右向左竖向排版的 本题就请你编写程序 把一段文字按古风排版 输入格式 输入在第一行给出一个正整数NN lt 100 lt 100 是每一列的字符数 第二行给出一个长度不超过1000的非空字符串 以回车结束 输出格式 按
  • flutter如何实现点击事件

    在Android中 您可以通过调用方法setOnClickListener将OnClick绑定到按钮等view上 在Flutter中 有两种方法 1 如果Widget支持事件监听 则可以将一个函数传递给它并进行处理 例如 RaisedBut
  • 华硕飞行堡垒进入bios

    1 关机重启 在重启时一直按住F2进入如下页面 2 按下F7 进入如下页面 3 通过移动键盘右键 gt 键 使界面来到Advanced 4 通过移动键盘下键 移动到Advanced中的SVM Mode 通过Enter键进行下拉选取 入下图小
  • unity知识学习(一)巨型太阳---组件Lens Flare的运用

    unity关于在天空设置一个巨型太阳 组件Lens Flare的运用 介绍 unity版本 如何制作巨型太阳 最基本的操作 如何制作巨型太阳 关键操作 我制作好的巨型太阳 介绍 本次知识前面比较简单 因此将基本操作和关键点操作分开 读者可方
  • CSS 实现文字渐变色

    1 background 属性设置渐变色 1 源码示例 text background image linear gradient to right pink purple color transparent webkit backgrou
  • eclipse New Server Runtime Environment 列表中没有 Apache Tomcat

    该问题主要原因可能是 Eclipse插件不全引起 按以下步骤安排插件即可 1 点击工具栏上的Help gt Install New Software 2在弹出的对话框的 Work with 输入 http download eclipse
  • 检查你的电脑是否支持硬件虚拟化技术

    有时候需要知道电脑是否支持硬件虚拟化技术 这种情况可能需要在在windown7系统上装MacOS 系统 通过使虚拟机 在虚拟机上安装出现如下问题是 首先 在更改你的BIOS设置之前 检测你的处理器是否支持硬件虚拟化技术 下载 securab
  • 等和子数组最小和(Java)

    题目描述 给定一个数组nums 将元素分为若干个组 使得每组和相等 求出满足条件的所有分组中 组内元素和的最小值 输入描述 第一行输入 m 接着输入m个数 表示此数组nums 数据范围 1 lt m lt 50 1 lt nums i lt
  • ElasticSearch从入门到精通:常用操作

    hello 大家好 我是 Jackpop 硕士毕业于哈尔滨工业大学 曾在华为 阿里等大厂工作 如果你对升学 就业 技术提升等有疑惑 不妨交个朋友 我是Jackpop 我们交个朋友吧 在前面这一部分 我已经解释了ElasticSearch的基
  • 51单片机四个并行I/O接口

    P0口 功能1 作为正常的并行I O接口 P1 P2 P3原理相同 控制端C 0 MUX开关向下 经过与门 T1截止 P0口作为输出口时 a 需要在三极管T2上部添加上拉电阻如图所示 b 内部总线输出数据为1 经过Q非得0 再经过MUX开关
  • 用python将时间序列信号或一维数组 转化成 图像的几种方法

    用python将时间序列信号或一维数组转化成图像的几种方法 深度学习在计算机视觉有了非常广泛的应用 视觉图像数据为二维数据 而在故障诊断领域的数据 来自于传感器的采集 属于典型的一维时间序列 因而绝大多数问题可以抽象成时间序列分类 TSC
  • Unity官方FPS教程解析(二)

    在上一篇文章中我们只是初步了解了这个游戏层次构造的一部分 今天我们继续上一章的内容吧 Enemy 两个enemy本质上没有差别 所以就其中一个来说说吧 Enemy Turret 这个初始场景的boss 一个站桩型敌人 当选中其根物体后我们可
  • Linux下SPI驱动详解及示例代码

    SPI Serial Peripheral Interface 是一种常用的串行通信协议 广泛应用于嵌入式系统中 在Linux系统中 SPI驱动负责管理和控制与SPI总线设备的通信 本文将详细介绍Linux下SPI驱动的工作原理 并提供示例
  • MES生产管理系统原型 MES产品原型 Axure产品原型

    MES生产管理系统原型 MES产品原型 Axure产品原型 1 生产管理 包括生产订单 生产计划 生产工单 工序任务单 报工记录 可提供高效的生产排程 2 质检管理 包括质检单 质检方案 检验项目 检验组管理 可提升质量追溯水平 3 库存管
  • uniapp tababr凸出图标已经自定义tabbar

    uniapp关于tabbar的文档 现在我想tabbar中间的显示为凸出的图标 类似下图 只需要在app中使用 不用兼容小程序的话 可以使用官方的midButton配置项 该配置项不兼容各种小程序 midButton height 70px
  • vue中使用el-upload组件修改上传的图片时,每次都会自动闪过上一次的图片

    引言 在进行vue后台管理系统开发的时候又遇到了这个问题 由于上次没有写文章记录 所以还是查看了之前写的项目才解决这个问题 遇到的问题 我将上传的表单单独作为一个组件 假设为A页面 然后在另外一个页面 假设为B页面 中使用Dialog来显示