前言

项目中使用 upload 组件,设置多选同时上传多张图片时,如果在 on-success 里面给 file-list 进行了赋值,on-success 回调函数只执行了一次,这时页面只有一张图片上传成功。

一、代码

<template>
  <el-upload
    class="upload-demo"
    :action="action"
    multiple
    :limit="9"
    :file-list="fileList"
    :on-success="uploadSuccess"
    :on-preview="handlePreview"
    :on-remove="handleRemove"
  >
    <el-button size="small" type="primary">点击上传</el-button>
    <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
  </el-upload>
</template>
<script>
export default {
  name: 'UploadFile',
  data () {
    return {}
  },
  props: {
    action: {
      type: String,
      default: '',
      required: true
    },
    fileList: {
      type: Array
    }
  },
  methods: {
    uploadSuccess (res, file, fileList) {
      console.log("res: ", res)
      console.log("file: ", file)
      console.log("fileList: ", fileList)

      this.fileList.push({
        name: res.Result.fileName,
        url: res.Result.imgUrl
      })
    },
    handleRemove (file, fileList) {},
    handlePreview (file) {},
  }
}
</script>

点击上传按钮,选中多张图片,发现只上传成功了一张,并且 on-success 函数只调用了一次。控制台打印如下:

 查看 fileList 数据,发现只有一条数据 status 状态为 success,通过查看 network 可以看到两条上传接口请求都成功并返回了数据。

二、原因

 在 on-success 回调函数中,只要有一条数据成功返回后,给 file-list 赋值后面就不会执行了。

三、解决方法

在 on-success 回调函数中,等所有上传请求完成以后在给 file-list 赋值。

    uploadSuccess(res, file, fileList) {
      console.log('res: ', res)
      console.log('file: ', file)
      console.log('fileList: ', fileList)

      if (fileList.every(item => item.status == 'success')) {
        fileList.map(item => {
          /** 这时只需要push进带有response的数据就好 */
          if(item.response) {
            this.fileList.push({
              name: item.response.Result.fileName,
              url: item.response.Result.imgUrl
            })
          }
        })
      }
    }

GitHub 加速计划 / eleme / element
54.06 K
14.63 K
下载
A Vue.js 2.0 UI Toolkit for Web
最近提交(Master分支:2 个月前 )
c345bb45 6 个月前
a07f3a59 * Update transition.md * Update table.md * Update transition.md * Update table.md * Update transition.md * Update table.md * Update table.md * Update transition.md * Update popover.md 7 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐