您的当前位置:首页>全部文章>文章详情

【Vue】Antd Pro Vue的使用(五)—— 多文件上传回显问题

CrazyPanda发表于:2024-05-06 15:56:34浏览:341次TAG:

需求:
多文件上传 ,上传的时候绑定fileList回显

vue版本:

vue2

问题:
上传成功了,也拿到了后台返回的数据,但是onchang监听的时候,file的状态一直是uploading

原因:onchange 只触发了一次

解决:
使用单文件上传时@change事件会至少触发两次,一次file.status=uploading,最后一次要么是done或者error,

handleUpload1(info) {
      if (info.file.status === 'uploading') {
        this.loading = this.isUpload1 = true
        return
      }
      if (info.file.status === 'done') {
        this.loading = this.isUpload1 = false
        this.params.imgUrl1 = info.file.response.data.url
      }
    }

但是如果是需要上传显示一组文件,则需要保存文件的状态会给一个属性 :file-list="fileList"
这时候change事件只会触发一次(uploading),后来在github上看到解决方法
对于受控模式,你应该在 onChange 中始终随时跟踪 fileList 的状态,保证所有状态同步到 Upload 内

    handleUploadChange ({ file, fileList }) {
      if (file.status === 'uploading') {
        // return true
      }
      this.imgsList = fileList
    }

最后一行是关键,无论file上传状态如何,filelist一定要同步,还有不能用return,要不然就没有回调了

注意:如果上传添加了上传前size校验,校验不通过,返回false,上传不成功,但是change方法依然会被触发,如果直接使用this.imgsList = fileList,页面就会多显示一个图片,所以change里面也要添加校验,不能直接添加所有文件,以免页面显示错误。

完整代码:

<a-form-item label="项目图片">
          <a-upload
            list-type="picture-card"
            class="avatar-uploader"
            action="/common/common/upload_file"
            :file-list="imgsList"
            :before-upload="beforeUpload"
            :accept="'image/*'"
            :remove="handleUploadRemove"
            v-decorator="['imgs', {initialValue:model?.imgs_arr || [], rules: [{required: true, message: '请上传项目图片'}]}]"
            placeholder="请上传项目图片"
            @change="handleUploadChange"
          >
            <div v-if="imgsList.length < 7">
              <a-icon type="plus" />
              <div class="ant-upload-text">
                上传图片
              </div>
            </div>
          </a-upload>
        </a-form-item>
        
methods: {
    beforeUpload (file) {
      const isImage = file.type === 'image/jpeg' || file.type === 'image/png' || file.type === 'image/jpg'
      if (!isImage) {
        this.$notification['error']({
          message: '上传格式错误',
          description: '请上传png/jpg/jpeg格式的图片',
          duration: 4
        })
      }
      const isLt2M = file.size / 1024 / 1024 < 2
      if (!isLt2M) {
        this.$notification['error']({
          message: '上传错误',
          description: '上传图片不能超过2M',
          duration: 4
        })
      }
      return isImage && isLt2M
    },
    handleUploadChange ({ file, fileList }) {
      if (file.status === 'uploading') {
        // return true
      }
      const isLt2M = file.size / 1024 / 1024 < 2
              if (isLt2M) {
              //校验成功的文件,添加到文件列表
                this.imgsList = fileList
              }      
    },
    handleUploadRemove (info) {
      console.log(info)
      var arr = []
      for (var i in this.imgsList) {
        if (this.imgsList[i].uid !== info.uid) {
          arr.push(this.imgsList[i])
        }
      }
      this.imgsList = arr
    }
}


猜你喜欢

【Vue】Vue常用框架介绍
现在的应用基本都是前后端分离,在国内,Vue相对来说更受欢迎一些,我们很多后端系统的前端都是Vue来开发的。那么Vue UI框架就显得尤为重要。Vue UI框架提供了一套丰富的用户界面组件及完整的前端UI解决方案,如按钮、表单、导航、布局等,使得开发者可以专注于业务逻辑开发,而不用从零构建这些常用的界面元素,帮助开发者更快速地构建高质量的用户界面。那么,都有哪些开源的UI框架呢?Element UIElement UI是一套为开发者、设计师和产品经理准备的基于Vue 2.0的组件库,提供了丰富的
发表于:2024-04-22 浏览:430 TAG:
【Vue】vue使用后端提供的接口
在 vue 中使用后端接口可通过以下步骤实现:安装 axios 库并导入。使用 axios 对象创建 http 请求,如 get 或 post。使用 data 选项传递数据。处理响应,使用 data 属性访问后端返回的数据。使用 vuex 管理从后端获取的数据,通过组件访问。在 Vue 中使用后端接口在 Vue.js 应用中使用后端提供的接口可以让你与服务器通信,获取和更新数据。本文将介绍如何在 Vue 中使用后端接口。1. 安装 Axios首先,你需要安装 Axios 库,这是一个用于发起 H
发表于:2024-04-18 浏览:291 TAG:
【Vue】vue2应用与vue3的不同之处
上一篇,我使用了vue2创建了一个应用,这次我使用vue3创建一个应用,看一下两者有什么不同。如下,是我用cue3创建的应用目录发现和vue2应用的目录一模一样,然后我用对比工具对比了两者的文件。1. 文件区别下面是package.json文件的区别,首先vue版本不同,对应的扩展组件也不同。下面是main.js的不同然后是APP.vue的不同2. 全局实例改变2.x 全局 API3.x 实例 API (app)Vue.configapp.configVue.config.productionT
发表于:2024-04-23 浏览:338 TAG:
【Vue】vue.js怎么定义一个组件
vue.js 中定义组件有三种方法:直接定义在 &lt;script&gt; 标签中并导出组件对象、使用组件工厂函数和 definecomponent 辅助函数创建、使用类定义组件并继承 vue.extend 创建。&lt;/script&gt;如何在 Vue.js 中定义组件一、直接定义1. 在 &lt;script&gt;&lt;/script&gt; 标签中,使用 export default {} 导出组件对象:&lt;code&nbsp;class=&quot;html&quot;&amp;g
发表于:2024-04-21 浏览:236 TAG:
【VUE】Vue3+Vite+TypeScript常用项目模块详解
&nbsp;目录1.Vue3+Vite+TypeScript 概述1.1 vue3&nbsp;1.1.1 Vue3&nbsp; 概述1.1.2&nbsp;vue3的现状与发展趋势1.2 Vite1.2.1 现实问题1.2 搭建vite项目1.3 TypeScript1.3.1 TypeScript 定义1.3.2 TypeScript 基本数据类型&nbsp;1.3.3 TypeScript语法简单介绍2. 项目配置简单概述2.1 eslint 校验代码工具配置2.1.1 eslint定义2.1
发表于:2024-02-21 浏览:446 TAG:
【Vue】Antd Pro Vue的使用(十) —— a-form表单赋值
在Ant Design Pro Vue中,为表单赋值通常涉及到两个方面:一是使用v-model进行双向绑定,二是直接通过this.form.setFieldsValue()方法设置表单字段的值。以下是一个简单的例子,展示如何为Ant Design Pro Vue中的表单赋值:首先,确保你已经在组件中引入了a-form-model和相关的表单字段组件比如a-form-model-item和a-input。在data函数中定义一个form对象,它包含了你想要绑定的表单字段。使用v-model指令将输
发表于:2024-05-10 浏览:301 TAG:
【Vue】Vue数据更新方法
前言平时做项目时会经常对数组和对象进行数据更新操作,而有时数据并没有及时更新,这时我们会用Vue.set(),this.$set()等方法让数据及时更新。
发表于:2024-03-30 浏览:316 TAG:
【Vue】Vue 单文件组件 (SFC) 规范
简介.vue 文件是一个自定义的文件类型,用类 HTML 语法描述一个 Vue 组件。每个 .vue 文件包含三种类型的顶级语言块 &lt;template&gt;、&lt;script&gt; 和 &lt;style&gt;,还允许添加可选的自定义块:
发表于:2024-03-29 浏览:271 TAG:
【Vue】yarn 运行vue3项目开发模式
要在YARN中以Vue.js 3的开发模式运行项目,可以按照以下步骤进行操作:确保已经安装了Node.js和YARN。如果没有安装,请先安装这两个工具。打开命令提示符或终端并导航到Vue.js 3项目所在的文件夹。使用以下命令来初始化新的YARN项目(如果还未创建):yarn&nbsp;init&nbsp;-y接下来,需要安装Vue CLI脚手架工具。运行以下命令来全局安装Vue CLI:npm&nbsp;install&nbsp;-g&nbsp;@vue/cli然后,通过以下命令将Vue CL
发表于:2024-02-08 浏览:291 TAG:
【Vue】Vue中对axios进行封装的最佳实践
vue是当前前端开发中最常用的框架之一,而ajax请求又是前端开发中非常关键的一环。为了方便开发者使用,vue社区中出现了许多对ajax请求库axios进行封装的实践。本文将介绍vue中对axios进行封装的最佳实践,帮助您更好地理解如何在vue项目中使用axios。封装axios在Vue项目中,我们需要把axios进行封装以方便使用。这里介绍一个标准的axios封装:import&nbsp;axios&nbsp;from&nbsp;&#39;axios&#39; import&nbsp;sto
发表于:2024-04-29 浏览:310 TAG: