如何封装一个实用的上传组件

本文详述了如何封装一个实用的上传组件,包括组件的定位、应用场景和属性特征。组件实现分为基础组件Base、展示型组件Simple和业务组件Dialog,分别用于基本上传、系统扩展和业务功能。Simple组件提供了上传提示、格式校验和已上传列表管理等功能,而Dialog组件则增加了弹窗展示和业务参数控制。此外,文章还介绍了组件间的交互和使用方式。
摘要由CSDN通过智能技术生成

前言

马上放假了,时间上相对宽裕,对最近做的东西进行一些总结。今天我们来看一个非常实用的组件,上传组件

我们先从组件的定位、组件的应用场景、组件的特性几个方面进行归纳

定位:

对于上传组件,基础的组件功能属于基础组件范畴,满足上传的基本功能。但业务平台的多样化,促使我们需要在基础组件之上,进行多样化扩展,满足业务功能的需求,这个多样化扩展隶属于业务组件层。但是需要注意几个点,进行组件约定,防止腐烂。

  • 业务公用性
  • 保持功能独立性,尽量解耦
  • 无业务需求,不开发

应用场景:

  • 数据导入,以excel为载体,一般都是成员列表、成绩导入等业务数据,方便用户进行批量操作
  • 文件管理,需要兼容格式较多,PNG/JPG/GIF/PDF/DOC/XLS/txt/md/html/mp4/avi等常用格式,多应用于平台的资源管理类功能
  • 独立业务功能,图片、头像临时上传需要

以上3个应用场景,一般的平台都有应用,但是不同场景对上传组件的功能要求可能不同。

这就需要考虑到业务特性以及产品规划能力。

可根据实际情况,从定位角度对不同场景的进行应用。

属性特征

1、单文件上传、多文件上传2、文件格式校验、文件大小校验3、上传文件维护(显示、移除)

组件实现

目录

对上传组件划分了3层,分别是 Base、Simple、Dialog

Base属于基础组件,提供简单的文件选择,和样式展示

Simple 复合组件-提供系统级别的扩展功能

1、上传提示语2、文件格式、文件大小、模板下载3、已上传列表管理-移除

Dialog 业务型组件

1、展示方式-弹窗2、文件上传功能3、业务参数控制、组件功能控制

入口文件

/*
 * @Description: 
 * @Author: daerduo
 */

import Upload from './Base';
import Simple from './Simple';
import Dialog from './Dialog';

// 复合组件-上传组件
Upload.Simple = Simple
// 业务组件
Upload.Dialog = Dialog

export default Upload; 

使用方式

<Upload.Dialogref="importRefs":options="UploadConfig":request-params="UploadParams"@refresh="refresh"
/>

/**
 * 导入配置
 */
const UploadConfig = {title: '导入成员',download: {type: 'AccountVo',tempName: '导入成员模板.xlsx'}
} 
<Upload.Simple ref="SimpleUploadRefs" :multiple="multiple" :file-rule="FILE_TYPE" :options="SimpleUploadConfig"><template #notes="scope"><span>只允许导入</span><span class="primary">XLS/XLSX</span><span>格式,且大小不超过10M</span><span v-if="getDownloadConfig()">,如果需要也可以<a class="download primary" title="点击下载" @click="downloadTempHandler">下载模板</a></span></template>
</Upload.Simple>

/**
 * 上传文件大小限制
 */
const SimpleUploadConfig = {fileSize: 10
} 

默认是Base,之间使用标签即可

<Upload @fileChange="fileChange" :multiple="multiple"></Upload> 

组件之间的交互

基础上传组件 Base

基础的组件是基于现有的第三方组件库(element)el-upload基础上&#x

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue是目前最为流行的前端框架之一,而Element Plus是基于Vue 3.0开发的一款UI框架,它提供了许多实用而丰富的组件,其中包括上传组件。但是,对于一些复杂的业务场景,我们可能需要进行上传组件封装,以便更好地满足我们的需求,并且提供更好的交互效果。 Vue 3.0提供了新的Composition API来实现组件的逻辑复用,这也为我们封装上传组件提供了新的方式。根据实际需求,我们可以采用不同的封装方式来实现上传组件,下面我们以Element Plus为例,结合Vue 3.0的Composition API,简单介绍一下上传组件封装方法。 首先,我们需要引入Element Plus的上传组件,并且在组件中定义需要用到的Props参数,包括上传路径、上传文件类型等。然后,我们可以封装一个可组合的上传逻辑,以便在不同的组件中复用。具体实现方式如下: ```js // Upload.vue <template> <el-upload :action="action" :accept="accept" :before-upload="beforeUpload" :on-success="onSuccess" :on-error="onError" :show-file-list="showFileList" ref="upload" > <slot></slot> </el-upload> </template> <script> import { ref } from 'vue' export default { props: { action: { type: String, required: true }, accept: { type: String, default: '' }, showFileList: { type: Boolean, default: true } }, setup(props, { slots }) { const uploadRef = ref(null) // 点击上传前执行的逻辑 const beforeUpload = (file) => { // 执行一些操作,如限制文件类型、文件大小等 } // 上传成功执行的逻辑 const onSuccess = (response, file, fileList) => { // 执行一些操作,如更新组件状态、页面数据等 } // 上传失败执行的逻辑 const onError = (error, file, fileList) => { // 执行一些操作,如提示用户上传失败、记录日志等 } return { uploadRef, beforeUpload, onSuccess, onError } } } </script> ``` 在上面的代码中,我们引入了Vue 3.0的Composition API,并且定义了一个Upload组件,其中包含了Element Plus的上传组件,并且定义了需要用到的Props参数,如上传路径、上传文件类型等。在setup函数中,通过ref创建了一个uploadRef,用来获取组件的实例。同时,我们还定义了上传前、上传成功、上传失败等具体的上传逻辑。 接下来,我们可以在具体业务组件中使用该Upload组件,并且结合插槽等方式,实现一些自定义的上传交互。以文件上传为例,代码如下: ```js // FileUpload.vue <template> <div> <upload action="/api/upload" accept=".jpeg,.png,.gif" @click="handleClick" @success="handleSuccess" @error="handleError" ref="uploader" > <el-button>{{ uploading ? '正在上传' : '选择文件' }}</el-button> </upload> </div> </template> <script> import Upload from './Upload.vue' import { ref, reactive } from 'vue' export default { components: { Upload }, setup() { const uploader = ref(null) const state = reactive({ uploading: false }) const handleClick = () => { uploader.value.$refs.upload.click() } const handleSuccess = (response) => { console.log(response) state.uploading = false } const handleError = (error) => { console.log(error) state.uploading = false } return { uploader, state, handleClick, handleSuccess, handleError } } } </script> ``` 在上面的代码中,我们引入了刚才封装Upload组件,并且通过@click事件触发选择文件的逻辑。同时,我们定义了state,用来控制上传状态,并且通过处理上传成功或者失败的回调,更新上传状态和提示用户上传结果。 通过上述代码,我们可以看到,使用Vue 3.0的Composition API结合Element Plus,实现上传组件封装非常方便,并且可以在不同的业务场景中复用。当然,具体的封装方式还需要结合具体需求来进行选择和实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值