最常用且清晰的方式是通过 props 传递文件上传限制规则,需确保类型明确、默认合理、校验到位:定义 fileType(数组,默认空)、fileSize(数字,单位 MB,默认 10)、multiple(布尔,默认 true)、limit(数字)和 required(布尔);父组件调用时语义化传参;子组件在 before-upload 中校验并降级处理,校验失败 return false 并通过 emit 通知父组件状态变化。
直接通过 props 把文件上传的限制规则传给子组件,是最常用也最清晰的方式。关键不是“能不能传”,而是“怎么传得安全、可读、易维护”。核心就三点:类型明确、默认合理、校验到位。
在子组件中用 defineProps(Vue 3)或 props 选项(Vue 2)定义接收字段,每项都注明类型、是否必填、默认值:
['.pdf', '.docx'],默认为空数组,表示不限类型5 表示最大 5MB,设默认值 10
true
multiple 配合使用避免硬编码字符串或魔法数字。用具名属性传递,让调用意图一目了然:
<FileUpload :file-type="['.jpg','.png','.webp']" :file-size="2" />
<FileUpload :file-type="['.pdf','.doc','.docx']" :file-size="20" :limit="1" />
<FileUpload :file-size="50" />(其他按默认值走)不能完全信任父组件传来的值。子组件应在 before-upload 钩子中主动校验,并给出友好提示:
fileType 是空数组,跳过格式检查;否则用 file.name.toLowerCase().endsWith() 判断后缀file.size > props.fileSize * 1024 * 1024
limit 已达上限,on-exceed 中弹提示,不自动追加到列表return false,阻止上传,避免无效请求打到后端props 只负责“输入规则”,子组件需通过 emit 主动通知父组件状态变化:
emit('update:modelValue', url) 或 emit('change', fileList)
emit('error', { type: 'size', message: '文件不能超过 10MB' })
emit('remove', file),让父组件决定是否更新本地列表virtualbox下怎么实现ubuntu20.04开机自动挂载共享文件夹?
ubuntu20.04怎么开启护眼模式? ubuntu夜间模式的设置方法
如何在Ubuntu 20.04上安装Microsoft Edge浏览器
Ubuntu20.10优麒麟触摸手势有哪些? 优麒麟系统新增手势汇总
优麒麟20.04.1发布 更新内容汇总(附下载)
Mermaid Visual Editor 如何同步可视化操作与 Mermaid 源码?