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

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

CrazyPanda发表于:2024-05-06 15:56:34浏览:350次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】Antd Pro Vue的使用(五)—— 多文件上传回显问题
需求: 多文件上传 ,上传的时候绑定fileList回显问题: 上传成功了,也拿到了后台返回的数据,但是onchang监听的时候,file的状态一直是uploading原因:onchange 只触发了一次解决: 使用单文件上传时@change事件会至少触发两次,一次file.status=uploading,最后一次要么是done或者error,handleUpload1(info)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(info
发表于:2024-05-06 浏览:352 TAG:
【Vue】vue中哪些属性可以写异步方法
vue 中可以利用 methods 和 computed 属性定义异步方法。methods: 1. 定义异步方法,使用 async/await 处理异步请求。2. 返回一个 promise 对象。computed: 1. 定义异步计算属性,使用 async/await 处理异步请求。2. 返回派生数据的 promise 对象。Vue 中支持异步方法的属性在 Vue 中,可以使用 methods 和 computed 属性来定义异步方法。methodsmethods 属性中定义的方法可以包含异步操
发表于:2024-05-16 浏览:214 TAG:
【Vue】uniapp(vue3)+node.js+websocket(实现实时通信效果)
文章目录概要整体架构流程技术名词解释技术细节小结概要uniapp基于vue3,小程序的聊天功能项目是基于node.js服务器搭建的简易双向通信网页,实现了实时更新在线人数以及用户间即时通讯的功能。整体架构流程后台接口代码1、首先我们可以通过Express 应用程序生成器快速搭建一个后台框架。(这快可以参考官网)2、服务端/** &nbsp;*&nbsp;WebSocket模块 &nbsp;*/ &nbsp; const&nbsp;{&nbsp;WebSocketServer&nbsp;}&amp;nbs
发表于:2023-12-05 浏览:304 TAG:
【Vue】Vue定义全局变量的方法
在Vue项目中我们需要使用许多的变量来维护数据的流向和状态,这些变量可以是本地变量、组件变量、父子组件变量等,但这些变量都是有局限性的。在一些场景中,可能需要在多个组件中共享某个变量,此时全局变量就派上了用场。定义全局变量的方法1. 使用Vue.prototype定义全局变量通过在 vue 的原型上定义属性,可以在所有组件中访问该属性。在main.js定义全局变量// main.jsVue.prototype.baseUrl = &quot;https://www.example.com/api
发表于:2024-04-22 浏览:362 TAG:
【Vue】Antd Pro Vue的使用(三)—— table列表的使用
用了几天ant design pro vue,发现vue2真的不是很好用,各种写法好麻烦。还有研究组件时,一定要看低版本的组件,高版本都是vue3的,并不适用。vue2版本组件位置:https://1x.antdv.com/components/alert-cn/ 作为后台管理端,用到最多的就是table列表,官网给的有预览但是自己上手的时候有事另外一回事了,首先就是接口请求的数据结果,官网并没有介绍接口应该返回什么样的数据结构,导致接口成功请求到数据,但table就是无法正常显示,最终参考de
发表于:2024-04-26 浏览:388 TAG:
【Vue】Vue3 开发实战分享——打印插件 Print.js 的使用(Vue3 + Nodejs + Print.js 实战)以及 el-table 与 el-pagination 的深入使用(下)
文章目录📋前情回顾&amp;前言🎯关于 el-table1️⃣获取每行对应的内容数据2️⃣行内数据判断处理(过滤)3️⃣对表格内容的索引🧩项目中延申使用🎯关于 el-pagination1️⃣显示总条数与分页展示2️⃣跳转页和页码样式3️⃣设置为中文🧩项目中延申使用📝最后📋前情回顾&amp;前言上一篇文章(Vue3 开发实战分享——打印插件 Print.js 的使用(Vue3 + Nodejs + Print.js 实战)以及 el-table 与 el-pagination 的深
发表于:2023-12-10 浏览:243 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 浏览:308 TAG:
【Vue】如何在 Vue 中直接引入 JS 文件
直接在 Vue 组件中引入外部 JS 文件有以下步骤:1. 在 &lt;script&gt; 标签中引入 JS 文件&lt;/script&gt;&lt;script&gt; //&nbsp;直接导入&nbsp;JS&nbsp;文件 import&nbsp;myModule&nbsp;from&nbsp;&#39;@/path/to/myModule.js&#39;; //&nbsp;使用导入的模块 console.log(myModule.someFunction()); &lt;/scri
发表于:2024-05-19 浏览:238 TAG:
【Vue】vue是什么模式的前端框架
vue 中的 mvvm 架构将应用程序分为 model、view 和 viewmodel:model:包含数据和业务逻辑,独立于视图。view:显示 model 中的数据,使用模板语法进行数据绑定。viewmodel:model 和 view 之间的桥梁,包含与 view 交互的数据和方法,并更新 view。mvvm 在 vue 中的优势包括响应式数据绑定、代码可重用性、提高生产力、易于调试。Vue:MVVM 架构什么是 MVVM?MVVM(Model-View-ViewModel)是一种软件设
发表于:2024-04-28 浏览:309 TAG:
【Vue】vue框架怎么运行
vue.js是一个用于构建用户界面的javascript框架,其工作原理包括:模板编译:将html模板编译为vdom;响应式系统:检测数据变化并更新vdom;dom更新:有效更新dom,最小化操作次数;自动渲染:监视数据变化并自动重新渲染ui。Vue.js框架的工作原理Vue.js是一个用于构建用户界面(UI)的JavaScript框架。它采用“响应式”系统,当数据发生变化时,框架会自动更新UI,简化了Web开发过程。Vue.js框架的工作流程:1. 模板编译:Vue.js将HTML模板编译为虚
发表于:2024-04-21 浏览:315 TAG: