在vue3中封装一个文件上传组件

news/2024/7/27 7:31:33/文章来源:https://blog.csdn.net/qq_35452726/article/details/136562738

因为在使用场景中可能会用到多个文件上传,如果每个都一个一个写慢慢就堆成ss了,

使用方法直接在父组件中v-model就可以简单使用

话不多说,直接上代码

<template><el-upload v-model:file-list="fileList" class="upload-demo" action="" :on-preview='openFile' :on-remove="handleRemove":http-request="handleSuccess" :limit="1"><el-button type="primary" :disabled="fileList.length >= 1">选择文件</el-button><template #tip><div class="el-upload__tip"><!-- jpg/png files with a size less than 500kb --></div></template></el-upload>
</template><script lang="ts" setup>
import { defineProps, defineEmits, ref, watch } from 'vue'
import type {  UploadUserFile } from 'element-plus'
import { uploadAction } from '@/utils/request'
const props = defineProps({modelValue: {type: String,default: ''}
});
const emit = defineEmits(['update:modelValue'])
const downloadUrl = ref('')//回显地址
const fileList = ref<UploadUserFile[]>([// {//   name: 'food.jpeg',//   url: '',// },
])
// 子组件的方法
function clickSon(val: any) {emit('update:modelValue', val);
}
// 监听 modelValue 的变化
watch(() => props.modelValue, (newVal, ) => {// 可以在这里做一些响应 modelValue 变化的逻辑  //监听父组件传值变化修改listif (newVal) {fileList.value = [{name: newVal,url: downloadUrl.value + newVal}]} else {fileList.value = []}
}, { immediate: true });
const handleRemove = (uploadFile:any, uploadFiles:any) => {// fileList.value = fileList.value.slice(-3)console.log(uploadFile, uploadFiles, '删除了');clickSon('')
}
const handleSuccess = (uploadFile: any, uploadFiles: any) => {console.log(uploadFile, uploadFiles, '上传');if (uploadFile) {let fd = new FormData();fd.append('files', uploadFile.file);console.log(fd, 'fd');//上传文件uploadAction('/api/gpsservice/v1/attachment/multiUpload', fd).then((res: any) => {if (res) {console.log(res[0], 'res');// fileList.value[0].name = res[0].name// fileList.value[0].url = downloadUrl.value + res[0].attachmentPath//上传成功后向父组件传值clickSon( res[0].attachmentPath)}})}
}
//点击预览
const openFile = (e: any) => { // 点击上传的文件列表的文件的操作console.log(e, "点击上传的文件列表的文件的操作");// window.open(e.url);var a = document.createElement("a");console.log(a, "创建a");var event = new MouseEvent("click");a.target = "_blank";a.download = e.name;a.href = e.url;//路径前拼上前缀,完整路径a.dispatchEvent(event);
}</script>

包括预览,删除,里面都实现了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_998098.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java/JDK下载安装与环境配置安装(win11超详细图文版教程)

一&#xff1a;安装JDK 1.开始安装JDK 从Oracle官网进入&#xff08;Java Archive | Oracle&#xff09;下载安装文件。 然后往下滑&#xff0c;可以看到官方已经讲收费和免费的分开来了。 这边建议下载Java SE 8 (8u201 and earlier)&#xff0c;原因请看这个博主讲述的理由…

2023第二届陇剑杯网络安全大赛 SS Writeup

sevrer save_1 打开流量包文件过滤http流量 从这个/helloworld/greeting开始追踪TCP流 直接百度搜索payload 搜索得到这题flag就是CVE-2022-22965 sevrer save_2 追踪TCP流&#xff0c;在tcp.stream eq 106&#xff0c;发现反弹shell的IP和端口 这题flag为192.168.43.128:2333…

React-子传父

1.概念 说明&#xff1a;React中子组件向父组件传递数据通常涉及回调函数和状态提升等方法。 2.代码实现 2.1绑定事件 说明&#xff1a;父组件绑定自定义事件 <Son onGetSonMsg{getMsg}></Son> 2.2接受事件 说明&#xff1a;子组件接受父组件的自定义事件名称…

JVM—内存模型(JMM)

之前字节面试问到过Java内存模型&#xff0c;回答的是内存结构。重新学习了一下整理出来。 1、前置知识 通信是指线程之间如何交换信息&#xff0c;主要有两种机制&#xff1a;共享内存 和 消息传递&#xff0c;共享内存指的是多个线程共享的数据区&#xff0c;A 线程写&#x…

ZJUBCA研报分享 | 《web3社交应用是否会成为区块链世界走向大规模应用的流量入口——以debox为例》...

ZJUBCA研报分享 引言 2023 年 11 月 — 2024 年初&#xff0c;浙大链协顺利举办为期 6 周的浙大链协加密创投训练营 &#xff08;ZJUBCA Community Crypto VC Course&#xff09;。在本次训练营中&#xff0c;我们组织了投研比赛&#xff0c;鼓励学员分析感兴趣的 Web3 前沿话题…

常见数据类型

目录 数据类型 字符串 char nchar varchar varchar2 nvarchar 数字 number integer binary_float binary_double float 日期 date timestamp 大文本数据 大对象数据 Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 数…

matlab 提取分割位于多边形区域边缘内部或边缘上的点

[in,on] = inpolygon(xq,yq,xv,yv) xv 和 yv 为定义的多边形区域的,如xv = [1 4 4 1 1 ];yv = [1 1 4 4 1 ];注意最后一个数字与第一个重复,保证多边形闭合; xq 和 yq 为待查询的点in:在多边形内部和边缘的点序号on:仅在多边形边缘的点序号 提取分割方法: matrix=[xq yq…

使用 Docker 部署 File Browser 文件管理系统

1&#xff09;File Browser 介绍 官网&#xff1a;https://filebrowser.org/ GitHub&#xff1a;https://github.com/filebrowser/filebrowser 今天为大家分享一款开源的私有云盘项目&#xff1a;File Browser&#xff0c;简单实用、轻量级、跨平台&#xff0c;安装部署简单快…

错误: 找不到或无法加载主类 com.zql.springbootTest.SpringbootTestApplication

首先查看application.properties是否出现问题 然后可以尝试 maven install

volatile关键字的作用 以及 单例模式(饿汉模式与懒汉模式的区别及改进)

文章目录 &#x1f4a1;volatile保证内存可见性&#x1f4a1;单例模式&#x1f4a1;饿汉模式&#x1f4a1;懒汉模式&#x1f4a1;懒汉模式多线程版&#x1f4a1;volatile防止指令重排序 &#x1f4a1;volatile保证内存可见性 Volatile 修饰的变量能够保证“内存可见性”以及防…

Prompt 共享网站

好用的提示词网站链接&#xff1a; PromptBase | Prompt Marketplace: Midjourney, ChatGPT, DALLE, Stable Diffusion & more.Search 100,000 quality AI prompts from top prompt engineers. Produce better outputs, save on time & API costs, sell your own prom…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:组件标识)

id为组件的唯一标识&#xff0c;在整个应用内唯一。本模块提供组件标识相关接口&#xff0c;可以获取指定id组件的属性&#xff0c;也提供向指定id组件发送事件的功能。 说明&#xff1a; 从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容…

Tomcat概念、安装及相关文件介绍

目录 一、web技术 1、C/S架构与B/S架构 1.1 http协议与C/S架构 1.2 http协议与B/S架构 2、前端三大核心技术 2.1 HTML&#xff08;Hypertext Markup Language&#xff09; 2.2 css&#xff08;Cascading Style Sheets&#xff09; 2.3 JavaScript 3、同步和异步 4、…

【翻译】零信任架构准则(一)Introduction to Zero Trust

零信任简介 零信任架构是一种移除内网信任的一种系统设计方法&#xff0c;它假定访问网络的用户都是有敌意的&#xff0c;因此&#xff0c;每个访问请求都需要基于访问防护策略去验证。零信任架构对用户请求的可信度是通过持续构建用户行为上下文来实现&#xff0c;而上下文又…

解决tomcat双击startup.bat一闪而过的问题

这种问题可能是tomcat找不到你的jdk环境配置路径 1、首先在tomcat的bin文件夹找到startup.bat 和catalina.bat两个文件 2、startup.bat用记事本打开 在末尾添加pause 3、保存修改&#xff0c;双击startup.bat如果出现这种问题&#xff0c;就是找不到jdk路径 4、用记事本打开ca…

苹果电脑专业的Mac垃圾清理工具CleanMyMac X4.14.7

CleanMyMac X是一款专业的Mac清理工具&#xff0c;它具有强大的功能和易用的界面&#xff0c;可以帮助用户快速清理Mac上的无用文件和垃圾&#xff0c;优化系统性能&#xff0c;提升电脑运行速度。 该软件的核心功能包括智能扫描与清理、应用程序管理、隐私保护和系统维护等。…

Newsmy储能电源与您相约九州汽车生态博览

2024年3月7日—10日&#xff0c;第24届 深圳国际智慧出行、汽车改装及汽车服务业态博览会&#xff08;以下简称“九州汽车生态博览会”&#xff09;将在深圳国际会展中心&#xff08;宝安&#xff09;举办&#xff0c;Newsmy纽曼集团将在3号馆32523展位&#xff0c;携全系产品与…

高效办公-浏览器基本操作

日常我们使用电脑&#xff0c;其实很大部分是用于网络功能&#xff0c;这里面除了客户端程序剩余的就是通过我们的浏览器获取信息或者使用业务系统了&#xff0c;这里就简单学习下浏览器基本常识与操作。 一、浏览器是什么&#xff1f; 白话讲浏览器就是一个软件&#xff0c;我…

如何在Linux系统部署MeterSphere服务并配置固定公网访问地址

文章目录 推荐 前言1. 安装MeterSphere2. 本地访问MeterSphere3. 安装 cpolar内网穿透软件4. 配置MeterSphere公网访问地址5. 公网远程访问MeterSphere6. 固定MeterSphere公网地址 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#…

搭建Zabbix监控系统

1、Zabbix基础 Zabbix是一个基于Web界面的企业级开源监控套件&#xff0c;提供分布式系统监控与网络监控功能。具备主机的性能监控&#xff0c;网络设备性能监控&#xff0c;数据库性能监控&#xff0c;多种告警方式&#xff0c;详细报表、图表的绘制等功能。检测的对象可以是L…