Vue中使用file类型input标签,无法使用reset方法清空已经选择的文件【简单粗暴的解决方案】

本文介绍了在Vue和SpringBoot结合的小项目中遇到的文件上传问题,尝试多种常规解决方案无效后,作者提出了一种直接而简单的方法。通过使用Vue的`v-if`和`nextTick`函数,或者setTimeout来实现输入框的动态显示和隐藏,从而达到刷新上传状态的目的。这种方法避免了复杂的逻辑,具有一定的实用性。
摘要由CSDN通过智能技术生成

这是在一个vue+springboot的小项目中遇到的问题,如图:
在这里插入图片描述
看了其他大佬的文章,看到了不少解决方案,但是无济于事,我这里依然报错,我一不做 二不休直接提供一个是十分暴力的解决方案

下面这个是两个按钮的 html 内容,不比在意其他内容,重点在input的v-if 上,对只需要这个就能实现,想必各位很多人已经猜到了我的思路了

      <input
        v-if="!item.cancel_img"
        type="file"
        @change="selectImgChange"
        accept="image/jpeg,image/png"
        single
      />
      <el-button type="info" size="small" @click="cancel_upload">
        取消上传
      </el-button>

下面这个是js函数部分的代码,注意了nextTick 函数,在vue2和vue3中用法不太一样,这个可以去搜搜了解一下

	function cancel_upload() {
      item.cancel_img = true;
      //nextTick 函数是在下一次dom更新后回调,
      //这就可以实现先执行的上面的代码,让input[file]节点消失,
      //然后再dom更新后回调该函数,又执行了让input[file]节点显示,这样就实现了刷新
      nextTick(() => {
        item.cancel_img = false;
      });
    }

其实上面的逻辑完全可以用settimeout实现,如果要考虑清除定时器,那就先let一个变量接受定时器再清除好了。但是这nextTick现成的好东西不香吗。

感觉思路不错可以点个赞支持一下哦,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值