el-upload上传组件遇到的问题

4,467 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第21天,点击查看活动详情

前言

最近项目需要上传图片,然后饿了么上面有封装好的上传组件,el-upload。然后我就用它来上传图片。这篇文章总结下使用el-upload上传组件遇到的问题。

问题

el-upload的file-list

image.png

el-upload是支持传入file-list的,数组类型,每一项需要有url地址,代表的是已上传的列表。

但是如果你之后再上传图片,el-upload默认是不会更新file-list列表的,而是需要你在上传成功后手动更新。

手动更新就手动更新,问题不大,于是我就在上传成功把上传成功图片的地址push到file-list中。

   <el-upload
      action="https://jsonplaceholder.typicode.com/posts/"
      :file-list="fileList"
      list-type="picture-card"
      :on-remove="handleRemove"
      :on-success="handleSuccess"
    >
      <i class="el-icon-plus"></i>
   </el-upload>
   export default {
       data () {
         return {
           fileList: [{ url: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg' }]
         }
       }, 
       methods: {
        handleRemove (file, fileList) {
          console.log(file, fileList);
        },
        handleSuccess (res, file) {
          this.fileList.push({
            url: file.url
          })
        }
    }

但是就遇到了下面动画过渡问题。

el-upload 动画过渡问题

上传的时候,图片总是会闪动,左右摇摆,然后才正常,过渡的动画有问题。 然后去网上也搜了。发现也有讨论这个问题的issues

主要是因为el-upload是用uid做上传列表遍历的key。然后transition-group动画是根据key来的。如果操作了fileList,没有传入uid,导致el-upload的uid重新生成,导致动画过渡有问题。

源码如下:

image.png

所以如果你对fileList操作的时候,你需要对传入的数据要加上uid,可以从file参数上获取uid,然后传入fileList。

代码如下:

handleSuccess (res, file) {
  this.fileList.push({
    uid: file.uid,
    url: file.url
  })
}

这样子过渡动画就正常了。

el-upload 删除图片

还有一个问题, el-upload删除图片的动画很慢,我切换tab要显示另外的图片,但是它的删除动画还没结束,就会导致,传入的图片和删除的图片在一起,就会导致过渡很突兀。