el-upload上传列表实现 展开 收起
| # el-upload上传列表实现 展开 收起 |
|---|
| #### 无图言*,所以先上最终效果图(想参考代码的可以直接滑到最后) |
![]() |
| ### 具体实现思路 |
| 注意: 每个人的项目环境以及需求,都不尽相同,所以这里仅仅提供思路. |
| #### 看看没有收起之前 |
![]() |
| 可以看到,没有实现收起之前,如果一直上传文件,文件列表会一直向下延伸....... |
| 如果需求的上传数量少的话,还可以接受,但是,让我们看看需求 |
![]() |
| ???? 30 张 |
![]() |
| 可见,为了尽可能的减少对页面的影响,只能弄个展开以及收起了! |
| #### 思考 |
| 展开以及收起,无非是控制显示数量,那么我们就要对症下药,先看看什么属性与上传的文件数量有关 |
| 这时候我们就要去看 element-ui 的文档了 |
| 这里可以看到 file-list 这个属性与我们的上传文件列表有关,那我们就从它下手! |
| 这里我们用 slice() 方法 试试 |
| 关键代码: |
| 注意:我这因为有多项附件要上传,所以列表是个数组 |
| 相应的每一项是一个item,所以这里item.accessory才是我图片存储的地方 |
| 根据你们的实际数据格式看着来,不要完全照抄 |
| ```vue |
| :file-list="item.accessory.slice(0, 1)" |
| ``` |
![]() |
| 随后可以看到,不管我们怎么上传图片,只会显示第一张 |
| 那么到这里,我们限制显示数量的需求达到了 |
| 然后不要着急,这时候我们先去弄个按钮出来,饭要一口一口吃嘛 |
| 关键代码: |
| ```vue |
| // textFlg 是我自定的 类似于开关 |
| <div v-show="item.accessory.length > 1" class="more" @click="res=>{item.textFlg = !item.textFlg}"> |
| ``` |
| 这个按钮的整体思路是,只有上传图片大于1张才显示; 默认显示当前上传的文件数量-1;每当点击之后,切换状态. |
![]() |
| 之后就能实现这种效果,样式啥的我就不在这里展开了,主要是传递一个思路! |
| 限制显示数量又了,切换效果有了,那么现在就剩展开了! |
| 上面我们这条代码吗? |
| ```vue |
| :file-list="item.accessory.slice(0, 1)" |
| ``` |
| 这里我们将 slice() 方法 的第二个参数 固定成了 1 ; 这样就始终只显示一条! |
| 那么我们要是根据某个状态来切换这个1,不就达到我们想要的展开了嘛? |
| 说干就干! |
| 经过一番摸索之后! 实现了切换显示数量 |
| ```vue |
| :file-list="item.accessory.slice(0, item.textFlg ? item.accessory.length : 1)" |
| ``` |
| 这里三元表达式的意思是 textFlg === true 吗? 如果为true 就显示与上传列表数组长度相等的数据 :(否则) 显示1 |
| textFlg 就是我们用来控制按钮文字的状态,所以毫无疑问他们俩可以共用! |
| 至此,我们就实现了如最终效果图的切换 |
![]() |
| 以上,就是大概的实现思路,当然例如样式之类的等等细节,本文都选择直接略过,还请谅解. |
| 最后我会贴出我的所有代码,以及数据格式. |
| 当然,这肯定不是最优解,不过这是我的思路,有别的观点或者解决方案欢迎讨论~ |
| ### 仅供参考! 仅供参考! 仅供参考! |
| 我的数据格式: |
| ```json |
| details:[ |
| textFlg: false, |
| ] |
| ``` |
| 我的示例源码: |
| ```vue |
| <el-upload |
| ref="upload" |
| list-type="text" |
| :style="{ width: item.accessory.length > 1 ? '140px' : '100%' }" |
| :action="$store.state.config.uploadConfig.actionUrl" |
:headers="{ Authorization: Bearer ${$store.state.token} }" |
| :on-preview="handlePreview" |
| :auto-upload="true" |
| :file-list="item.accessory.slice(0, item.textFlg ? item.accessory.length : 1)" |
| :on-success=" |
| (res, file) => { |
| return handleSuccess(res, i, file) |
| } |
| " |
| :on-remove="handleRemove" |
| :before-upload="beforeAvatarUpload" |
| multiple |
| :limit="30" |
| :on-exceed="handleExceed" |
| :disabled="!isEdit" |
| > |
| <div v-show="item.accessory.length > 1" class="more" @click="more(item)"> |
{{ item.textFlg ? '收起' : +${item.accessory.length - 1} }} |
| ``` |
| 样式: |
| ```css |
| .more { |
| margin: 0 0 0 110px; |
| cursor: pointer; |
| width: 45px; |
| height: 20px; |
| background: #ebeef5; |
| text-align: center; |
| border-radius: 5px; |
| position: absolute; |
| bottom: 12px; |
| right: 5px; |
| } |
| ``` |
| 如果能帮到你,是我最大的荣幸! |
el-upload上传列表实现 展开 收起的更多相关文章
- 使用elementUI的时候,使用Upload 上传的时候,使用 list-type 属性来设置文件列表的样式,before-upload方法失效
最近在做项目的时候,使用elementUI的时候,使用Upload 上传的时候,before-upload方法失效. 情况下:使用 list-type 属性来设置文件列表的样式. 最终的优化之后:(演 ...
- element-ui Upload 上传组件源码分析整理笔记(十四)
简单写了部分注释,upload-dragger.vue(拖拽上传时显示此组件).upload-list.vue(已上传文件列表)源码暂未添加多少注释,等有空再补充,先记下来... index.vue ...
- UI标签库专题四:JEECG智能开发平台 Upload(上传标签)
1. Upload(上传标签) 1.1. 參数 属性名 类型 描写叙述 是否必须 默认值 id string 上传控件唯一标示 是 null name string 控件name 是 null ...
- React实战之Ant Design—Upload上传_附件上传
React实战之Ant Design—Upload上传_附件上传 Upload组件大家都在官方文档中看过了,但写的时候还是会遇到许多问题,一些新手看了文档后感觉无从下手,本文过多的简绍就不说了,直接看 ...
- Struts Upload上传文件
1.Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax.servlet.context.te ...
- Nginx的Upload上传模块
前段时间做一个项目,需要上传文件,差不多需要20M左右,普通用php处理会比较麻烦,经常超时,而且大量占用资源.于是搜索了下,决定用nginx的upload上传模块来处理. 你可以在这里:http:/ ...
- And Design:拓荒笔记——Upload上传
And Design:拓荒笔记——Upload上传 上传前
- upload 上传 加token 在 :headers='headers' 注意 不要直接写$refs.upload.headers = {} 这样vue会警告 修改组件内部变量
upload 上传 加token 在 :headers='headers' 注意 不要直接写$refs.upload.headers = {} 这样vue会警告 修改组件内部变量 <Upload ...
- element-ui upload上传组件问题记录
element-ui upload上传组件遇到的问题
随机推荐
- 排坑·IPhone&IOS中不兼容正则中的断言匹配
阅文时长 | 1.14分钟 字数统计 | 1834.4字符 主要内容 | 1.问题切入 2.什么是断言匹配 3.断言匹配的替换方案 4.声明与参考资料 『排坑·IPhone&IOS中不兼容正则 ...
- [刷题] 437 Paths Sum III
要求 给出一棵二叉树及一个数字sum,判断这棵二叉树上存在多少条路径,其路径上的所有节点和为sum 路径不一定始于根节点,终止于叶子节点 路径要一直向下 思路 分情况讨论:根节点在路径上(8) / 根 ...
- head元素的内容
一.head元素 head元素的内容用来向浏览器提供一些文档信息,此外还可以包含js脚本和css层叠样式单.head中一般包含title.meta.css.js等内容,head中元素的内容在浏览器中不 ...
- linux进阶之yum管理
一.部署私有repo源 1.官网下载需要的仓库: rsync -avrt --delete rsync://mirrors.ustc.edu.cn/centos/7/cloud/x86_64/open ...
- 科普 AF摄像头
AF(Auto Focus)自动对焦:自动对焦有两种方式,根据控制原理分为主动式和被动式两种.主动式自动对焦通过相机发射红外线,根据反射回来的射线信号确定被摄体的距离,再自动调节镜头,实现自动对焦.被 ...
- 3分钟 Markdown 快速入门(超详细)(Day_33)
Markdown 快速入门 (这个贼重要)注:所有符号要在英文状态下完成哦,中文是没有效果的. 1.标题 # 表示一级标题 ## 表示二级标题 ### 表示三级标题 #### 表示四级标题 ##### ...
- SqlServer事务详解(事务隔离性和隔离级别详解)
概述 不少人对于事务的使用局限于begin transaction:开始事务.commit transaction:提交事务.rollback transaction:回滚事务的初步运用. 并且知道使 ...
- 在Visual Studio 中使用git——分支管理-上(八)
在Visual Studio 中使用git--什么是Git(一) 在Visual Studio 中使用git--给Visual Studio安装 git插件(二) 在Visual Studio 中使用 ...
- 写Bug时,需要注意的几点 02
重构2-重新组织函数 重构的基本技巧--小步前进,频繁测试. 模式是你希望到达的目标,重构则是到达之路. 在单进程软件中,你永远不必操心多么频繁地调用某个函数,因为函数的调用成本很低.但在分布式软件中 ...
- Dubbo-admin安装测试
1.下载dubbo-admin 下载地址 2.解压到本地 3.在项目目录下打包dubbo-admin 使用命令 mvn clean package -Dmaven.test.skip=true 第一次 ...





