这是在一个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现成的好东西不香吗。
感觉思路不错可以点个赞支持一下哦,谢谢。