【Vue】Antd Pro Vue的使用(五)—— 多文件上传回显问题
CrazyPanda发表于:2024-05-06 15:56:34浏览:350次
需求:
多文件上传 ,上传的时候绑定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) { if (info
- 【Vue】vue中哪些属性可以写异步方法
- vue 中可以利用 methods 和 computed 属性定义异步方法。methods: 1. 定义异步方法,使用 async/await 处理异步请求。2. 返回一个 promise 对象。computed: 1. 定义异步计算属性,使用 async/await 处理异步请求。2. 返回派生数据的 promise 对象。Vue 中支持异步方法的属性在 Vue 中,可以使用 methods 和 computed 属性来定义异步方法。methodsmethods 属性中定义的方法可以包含异步操
- 【Vue】uniapp(vue3)+node.js+websocket(实现实时通信效果)
- 文章目录概要整体架构流程技术名词解释技术细节小结概要uniapp基于vue3,小程序的聊天功能项目是基于node.js服务器搭建的简易双向通信网页,实现了实时更新在线人数以及用户间即时通讯的功能。整体架构流程后台接口代码1、首先我们可以通过Express 应用程序生成器快速搭建一个后台框架。(这快可以参考官网)2、服务端/** * WebSocket模块 */ const { WebSocketServer }&nbs
- 【Vue】Vue定义全局变量的方法
- 在Vue项目中我们需要使用许多的变量来维护数据的流向和状态,这些变量可以是本地变量、组件变量、父子组件变量等,但这些变量都是有局限性的。在一些场景中,可能需要在多个组件中共享某个变量,此时全局变量就派上了用场。定义全局变量的方法1. 使用Vue.prototype定义全局变量通过在 vue 的原型上定义属性,可以在所有组件中访问该属性。在main.js定义全局变量// main.jsVue.prototype.baseUrl = "https://www.example.com/api
- 【Vue】Antd Pro Vue的使用(三)—— table列表的使用
- 用了几天ant design pro vue,发现vue2真的不是很好用,各种写法好麻烦。还有研究组件时,一定要看低版本的组件,高版本都是vue3的,并不适用。vue2版本组件位置:https://1x.antdv.com/components/alert-cn/ 作为后台管理端,用到最多的就是table列表,官网给的有预览但是自己上手的时候有事另外一回事了,首先就是接口请求的数据结果,官网并没有介绍接口应该返回什么样的数据结构,导致接口成功请求到数据,但table就是无法正常显示,最终参考de
- 【Vue】Vue3 开发实战分享——打印插件 Print.js 的使用(Vue3 + Nodejs + Print.js 实战)以及 el-table 与 el-pagination 的深入使用(下)
- 文章目录📋前情回顾&前言🎯关于 el-table1️⃣获取每行对应的内容数据2️⃣行内数据判断处理(过滤)3️⃣对表格内容的索引🧩项目中延申使用🎯关于 el-pagination1️⃣显示总条数与分页展示2️⃣跳转页和页码样式3️⃣设置为中文🧩项目中延申使用📝最后📋前情回顾&前言上一篇文章(Vue3 开发实战分享——打印插件 Print.js 的使用(Vue3 + Nodejs + Print.js 实战)以及 el-table 与 el-pagination 的深
- 【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指令将输
- 【Vue】如何在 Vue 中直接引入 JS 文件
- 直接在 Vue 组件中引入外部 JS 文件有以下步骤:1. 在 <script> 标签中引入 JS 文件</script><script> // 直接导入 JS 文件 import myModule from '@/path/to/myModule.js'; // 使用导入的模块 console.log(myModule.someFunction()); </scri
栏目分类全部>