当前位置: 首页 > news >正文

vue 自定义文件选择器组件- 原生 input实现

在 vue 中使用原生 input 标签实现文件选择,支持多选,封装成一个组件

介绍

自定义的文件选择器组件,封装一个隐藏的<input type="file">元素,并通过一个按钮来触发文件选择操作。

UploadFiles.vue

<template><div class="upload-files"><input type="file" ref="fileInput" style="display: none" @change="handleFileChange" multiple /><el-button size="small" @click="triggerFileInput">选择文件</el-button></div>
</template><script>
export default {methods: {triggerFileInput() {this.$refs.fileInput.value = null; // 重置input的值this.$refs.fileInput.click();},handleFileChange(event) {const files = event.target.files;const fileArray = [];if (files.length > 0) {for (let i = 0; i < files.length; i++) {fileArray.push(files[i]);}this.$emit('files-selected', fileArray);}return fileArray;}}
}
</script><style scoped></style>

代码结构分析

模板部分 (<template>)

  • 包含一个隐藏的文件输入框 (display: none)
  • 一个可见的"选择文件"按钮(使用Element UI的el-button组件)

脚本部分 (<script>)

包含两个主要方法:

  1. triggerFileInput() 方法:
  • 重置文件输入框的值(清除之前的选择)
  • 通过编程方式触发隐藏文件输入框的点击事件
  1. handleFileChange(event) 方法:
  • 当用户选择文件后触发
  • 将FileList对象转换为数组
  • 通过$emit向父组件传递选择的文件数组

工作原理

  1. 用户点击"选择文件"按钮
  2. 触发隐藏的<input type="file">的点击事件
  3. 系统原生文件选择对话框弹出
  4. 用户选择文件后,handleFileChange方法处理文件
  5. 将文件数组通过自定义事件files-selected传递给父组件

组件特点

  • 支持多文件选择(multiple属性)
  • 重置功能:每次点击都会清空之前的选择
  • 事件驱动:通过Vue的自定义事件与父组件通信
  • UI封装:隐藏了原生文件输入框的不美观样式

使用示例

父组件可以这样使用:

<template><upload-files @files-selected="handleFilesSelected"></upload-files>
</template><script>
export default {components: { uploadFiles },methods: {handleFilesSelected(files) {// 在这里处理接收到的文件数组console.log('选择的文件:', files);}}
}
</script>

http://www.dtcms.com/a/348289.html

相关文章:

  • 一文学习和掌握网关SpringCloudGateway
  • Java基础知识(五)
  • 南科大C++ 第二章知识储备
  • 电脑深度清理软件,免费磁盘优化工具
  • Shell脚本-如何生成随机数
  • 设置接收超时(SO_RCVTIMEO)
  • 8月精选!Windows 11 25H2 【版本号:26200.5733】
  • 牛市阶段投资指南
  • ffmpeg强大的滤镜功能
  • SingleFile网页保存插件本地安装(QQ浏览器)
  • 【图像处理基石】如何把非笑脸转为笑脸?
  • ffmpeg 问答系列-> mux 部分
  • 启动Flink SQL Client并连接到YARN集群会话
  • Node.js自研ORM框架深度解析与实践
  • 柱状图中最大的矩形+单调栈
  • STM32 入门实录:macOS 下从 0 到点亮 LED
  • Java全栈开发面试实录:从基础到实战的深度探讨
  • 微服务-19.什么是网关
  • 【论文阅读】AI 赋能基于模型的系统工程研究现状与展望
  • Redis--day12--黑马点评--附近商铺用户签到UV统计
  • Excel 表格 - 合并单元格、清除单元格格式
  • 包裹堆叠场景漏检率↓79%!陌讯多目标追踪算法在智慧物流的实践优化
  • EXCEL实现复制后倒序粘贴
  • 暗影哨兵:安全运维的隐秘防线
  • 深度学习部署实战 Ubuntu24.04单机多卡部署ERNIE-4.5-VL-28B-A3B-Paddle文心多模态大模型(详细教程)
  • 用墨刀开发能碳管理系统 —— 从流程图到设计稿全流程拆解
  • EAM、MES和CRM系统信息的整理
  • c语言指针学习
  • C文件编译
  • IQC、IPQC、PQC、FQC、OQC在ERP/MES/WMS中的系统协同