看antd文档,刚开始我用得beforeUpload来实现,勉强能完成我想要的功能,但是流程上不完美,需要先选择了文件,才能弹出确认框,但是我的确认框其实跟文件没有关系,我想要先弹确认框再打开文件选择弹框。

继续搜索,发现一个解决思路是使用两个按钮叠加,上层的普通按钮点击后弹出确认框,点了确认后再使用ref的click来触发upload组件内部的按钮点击事件,但是这个方案有一些瑕疵,比如我还得使用css将两个按钮叠加起来,还需要想办法阻止下层按钮的点击事件。

继续看antd文档,发现openFileDialogOnClick这个属性能解决我的问题。

初始状态下openFileDialogOnClick设置为false,给upload组件里的button添加点击事件,在点击事件里去弹出确认框,在确认框里点了确定,我们在将openFileDialogOnClick设置为true,然后我们在用ref来触发upload,文件选择框就可以打开了。

需要注意的是,当我们使用ref触发click的时候,原来在button上添加的点击事件也会触发,所以当openFileDialogOnClick为true的时候,确认框依旧会弹出来,这时候需要加判断,只有当openFileDialogOnClick为false的时候才弹出确认框。文件上传结束后,还要记得将openFileDialogOnClick恢复初始值false。

<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelSyncToUser"@change="handleImportExcelSyncToUser" accept=".xls" :openFileDialogOnClick="openFileDialogOnClick"><a-button ref="btn" type="primary" icon="import" @click="handleClick">考生基本信息导入</a-button></a-upload>
handleClick(){//当openFileDialogOnClick为false的时候,要弹出确认框if(!this.openFileDialogOnClick){this.getProjectName();}},getProjectName(){if(!this.projectId){this.$message.error("请选择项目!");return}let projectName = '';let url = this.url.queryById+'?projectId='+this.projectId;getAction(url).then(res => {if (res.success) {projectName = res.result.name;this.$confirm({title: '导入确认',content: '请确定项目名称:'+projectName,okText: '确定导入',cancelText: '取消导入',onOk: () => {// 上传前的事件处理完成后,触发上传文件的事件this.confirmImport();},onCancel: () => {this.openFileDialogOnClick = false;return},});}else{this.$message.warning(res.message)}})},
confirmImport(){this.$confirm({title: '考生基本信息导入确认',content: '每次导入会覆盖原来的数据,确定导入吗?',okText: '确定导入',cancelText: '取消导入',onOk: () => {this.openFileDialogOnClick = true;setTimeout(()=>{// 点击按钮,打开选择文件的对话框this.$refs["btn"].$el.click();},50)},onCancel: () => {this.openFileDialogOnClick = false;return},})},

我这个案例里弹了两次确认框。

ant design vue:upload打开选择文件弹框前弹出确认框相关推荐

  1. ANT DESIGN VUE upload 上传excel (使用upliad组件,上传excel到页面表格)

    <a-uploadname="file" //发到后台的文件参数名:multiple="false" //禁用多选:file-list="fil ...

  2. oracle中showTime用法,ant design vue中日期选择框混合时间选择器的用法

    首先时间格式化用到moment方法,需要在页面中引入moment组件 import moment from 'moment' 结构代码: 其中,showTime.defaultValue是设置的默认展 ...

  3. Ant Design Vue DatePicker 日期选择框 限制可选时间

    背景 发送时间需要限制在当前时间分钟之后,比如:当前时间是2022年6月7日12:00,那么时间选择器可选的时间是:在2022年6月7日12:00 之后的. 实现 <a-date-pickers ...

  4. ant design vue 中Upload组件如何自定义文件列表的样式

    ant design vue 中Upload组件如何自定义文件列表的样式 问题 历程 UploadList 组件源码 h() 方法 实现 注 问题 技术:vue.ant design vue 在开发项 ...

  5. 【vue2中引入阿里第三方图标库使用自定义的Ant Design Vue组件a-cascader级联选择后缀图标】

    1,首先在vue2项目中安装ant design vue组件 npm install ant-design-vue@1.7.2 2,a-cascader组件在页面中的使用 <template&g ...

  6. 解决ant design vue中的modal弹框样式修改无效问题 修改modal样式无效

    ant design vue中的modal弹框修改样式无效问题 ant中的弹框样式是修改不了的 原因在于弹框modal被挂载在最大的元素div外面了 所以需要将挂载在某个html元素上 在modal外 ...

  7. ant design Vue 纯前端实现分页

    ant design Vue 纯前端实现分页功能 (有选择的话最好让后端分页,前端分页可能会有问题,为了性能,尽量不要前端分页) 自己想的一个简单方法: 通过页码改变事件,每页数据个数改变事件,获取改 ...

  8. chrome插件开发(manifest_version版本V3 + Ant Design Vue)

    1.什么是 Chrome 插件 谷歌浏览器插件是一种小型的定制浏览器体验的程序,通过插件可以自定义浏览器的一些行为来适合个人的需求,例如上面的查看服务器状态插件. 在应用商店中下载下来的插件基本上都是 ...

  9. ant design vue table 高度自适应_Vue组件库大评测 Element, iView, HeyUI, Ant Design Vue

    今天偶然的机会想了解下其他Vue相关的组件库,网上刚好有文章,顺便自己做一下笔记,算是资源整理吧 .好了,话不多说,直接开始: 组件库的选择对于前端开发有者至关重要的影响,而组件的丰富性以及健壮性是我 ...

最新文章

  1. 【C++】拷贝控制与资源管理
  2. 有关c++中const用法
  3. zabbix如何添加图表显示内容_Zabbix图表出现中文乱码解决方案
  4. php单表显示动态下拉框,PHP:使用optgroup动态下拉列表
  5. 35 岁程序员的独家面试经历
  6. parser.add_argument验证格式
  7. 普通人学python有意义吗_学python难吗
  8. java pdf无法加载_java - 试图使用iText7合并来合并pdf,但是当我打开最终的合并pdf时,它说无法加载pdf文档 - SO中文参考 - www.soinside.com...
  9. eclipse 编码设置之BOM丢失
  10. 使用java如何访问报表服务器_Java访问远程http服务器上数据的简便方法
  11. Win7系统下网站发布IIS配置
  12. java录音程序_record类完成语音信号采集的任务_Android实现语音数据实时采集、播放...
  13. 我在阿里工作9年,今天我离职了
  14. 2017年计算机类核心期刊,2017年北大版中文核心期刊要目总览目录.pdf
  15. 软件设计师视频教程百度网盘
  16. 该如何选择适合的服务器
  17. [已解决]批处理查看文件大小的字节怎样转换成KB和MB?
  18. 面相对象模型(OOM)——用例图(The Use Case Diagram)
  19. NVIDIA Jetson Nano主机的autoware的学习与demo运行-第1章-操作环境的搭建
  20. 数据屏蔽:静态与动态

热门文章

  1. Mysql的四表练习题(一)
  2. 一个交警的吐血警告,所有开车和坐车的同胞都要看一看
  3. 如何让veil uVision5显示行
  4. c语言编程上升沿怎样写,plc结构化编程怎么写
  5. React DDD 会是未来的趋势吗?
  6. 如何开发一个企业级的 Go 应用?
  7. 如何用简单的方式将数组转成json
  8. 西瓜书学习(task2)
  9. MLM模型中,是否应该按15%的比例mask?
  10. jQuery是什么?