最近测试小姐姐提了一个bug,说一个上传功能中,选择了一个文件后,如果不想上传这个文件了,想换一个,发现再点击按钮,就没反应了,让我解决这个bug。
我本来以为挺简单的一个小问题,后来发现还挺麻烦,研究了两天,也没有找到解决的办法。
在网上搜索了很多答案,大部分都说,需要使用this.$refs.uploadImg.clearFiles()清除一下上传文件,我试了一下,没有用。
后来有一些文章说,主要是因为上传按钮el-upload标签中添加了limit=1的属性,我把这个属性删除掉,果然是可以上传了,但是又带来了另一个问题,就是你再上传的话,他其实并替换原来选择的文件,而是在下面又追加了一个文件,等于是同时上传了多个文件。
不过根据项目要求,这个地方只能上传一个文件,所以还必须要加上limit=1这个属性,加上以后,一旦选择了文件,再点击上传按钮就又没反应了,这个问题搞得我头大。
本来想放弃的,因为这个上传按钮也不是很重要,如果手动删除的话,也可以再次上传,不过这样一步操作就变成了两步,对于用户体验来说并不好,我也觉得这样不太合适,如果能解决的话,岂不是更好?也可以再测试小姐姐面前露一小手。
我又想了很多办法,比如添加一个file-list属性,试图通过这个属性来定义上传文件列表,后来发现也不行,特别是在手动上传的时候,你只是选了一个文件,并没有触发上传,这个时候是没有办法改变这个上传列表的。
后来我在另一篇文章中发现有人提到了on-exceed="handleExceed"属性,它的作用是解决文件超出个数限制时的钩子。也就是说,这个属性是专门为了解决这个问题而存在的,因为以前没有这种需求,所以也就很少用到。
我就试了试,果然是有效的,用法也很简单,添加on-exceed后,可以在再次上传时,触发一个方法,我们在这个方法里面写需要的操作就可以了。例如:
handleExceed(files){
this.$refs.uploadImg.clearFiles()
this.$nextTick(() => {
this.$refs.uploadImg.handleStart(files[0])
})
}
这样就完美解决了el-upload上传按钮添加limit=1属性后,不能替换上传文件的问题了。不过有人说这个on-exceed属性在elementUI的老版本中没有,在新版本中才能使用,所以要注意这一点。

被折叠的 条评论
为什么被折叠?



