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

Vue3——自定义封装上传图片样式

自定义封装上传图片样式

一、首先需要新建一个自组建完善基础的结构,我这里起名为ImgUpload.vue

<el-upload name="file" :show-file-list="false" accept=".png,.PNG,.jpg,.JPG,.jpeg,.JPEG,.gif,.GIF,.bmp,.BMP" :multiple="false" :http-request="uploadImgage">
</el-upload>

name 上传的文件字段名
show-file-list 是否显示已上传文件列表
accept 接受上传的文件类型(thumbnail-mode 模式下此参数无效)
multiple 是否支持多选文件
http-request 覆盖默认的 Xhr 行为,允许自行实现上传文件的请求

二、接下来自定义背景以及图标

  <el-upload name="file" :show-file-list="false" accept=".png,.PNG,.jpg,.JPG,.jpeg,.JPEG,.gif,.GIF,.bmp,.BMP":multiple="false" :http-request="uploadImgage"><!-- 这里定义上传样式--><div class="cover-upload-btn"><template v-if="modelValue"><img :src="proxy.globaInfo.imageUrl + modelValue" alt=""></template><i v-else class="iconfont icon-jia"></i></div></el-upload>

判断如果存在路径则显示图片,否则显示默认背景
样式如下:

.cover-upload-btn {width: 150px;height: 150px;position: relative;border: 1px solid #DCDFE6;border-radius: 5%;padding: 5px;box-sizing: border-box;img{width: 100%;}i {position: absolute;top: 50%;left: 50%;font-size: 46px;transform: translate(-50%, -50%);color: #aaa;}
}

样式效果如下:
在这里插入图片描述

三、上传方法

const uploadImgage = async(file) => {console.log(file);// 请求接口中需要带url以及let result = await proxy.Request({url:api.uploadUrl,  // 上传路径dataType:'file', // 指定传输类型params:{file:file.file,   // 提交上传路径到指定位置type:0,          }})const fileName = result.data.fileNameemit('update:modelValue',fileName) 
};

dataType可以参考这段封装请求的requset

请添加图片描述

前面配置的代码部分如下:

import { getCurrentInstance } from "vue";const {proxy} = getCurrentInstance()
// 通过props将路径传给父组件
const props = defineProps({modelValue:{type:String,default:null}
})
const api = {uploadUrl:'/img' //图片上传接口
}

然后注意一下这个位置

  <img :src="proxy.globaInfo.imageUrl + modelValue" alt="">

这里的globaInfo.imageUrl是在全局中进行调用,所以上方使用proxy来获取路径位置
main.js配置如下

import App from './App.vue'
const app = createApp(App);
app.config.globalProperties.globaInfo = {  // 添加可以在应用程序内的任何组件实例中访问的全局 property。属性名冲突时,组件的 property 将具有优先权。imageUrl:'/api/file/'  //放入图片的文件夹位置
};
import ImgUpload from '@/components/ImgUpload.vue'; //引入子组件
app.component('ImgUpload',ImgUpload) // 全局调用组件

最后在父组件中引入自组件即可

<el-form-item label="封面" class prop="cover"><CoverUpload v-model="formData.cover"></CoverUpload>
</el-form-item>
http://www.lryc.cn/news/40391.html

相关文章:

  • ChatGLM-6B (介绍以及本地部署)
  • react的基础使用
  • letcode 4.寻找两个正序数组的中位数(官方题解笔记)
  • 【面试题系列】K8S常见面试题
  • 字符函数和字符串函数(上)-C语言详解
  • 全连接神经网络
  • 深度学习目标检测ui界面-交通标志检测识别
  • ubuntu不同版本的源(换源)(镜像源)(lsb_release -c命令,显示当前系统的发行版代号(Codename))
  • linux入门---程序翻译的过程
  • springboot复习(黑马)
  • C++指针详解
  • tauri+vite+vue3开发环境下创建、启动运行和打包发布
  • 安卓进阶系列-系统基础
  • 10 Wifi网络的封装
  • 手把手的教你安装PyCharm --Pycharm安装详细教程(一)(非常详细,非常实用)
  • 开发板与ubantu文件传送
  • 如何成为一名优秀的网络安全工程师?
  • 面试问题之高并发内存池项目
  • 如果阿里巴巴给蒋凡“百亿补贴”
  • Linux版本现状
  • Winform中实现保存配置到文件/项目启动时从文件中读取配置(序列化与反序列化对象)
  • 基于python的超市历年数据可视化分析
  • GPT-4技术报告
  • 前端性能优化
  • 尚医通-(三十三)就诊人管理功能实现
  • 《Spring Boot 趣味实战课》读书笔记(二)
  • Spring Cloud -- GateWay
  • 【C语言】memcpy , memset等内存操作函数使用方法与注意事项
  • 尚融宝04-mybatis-plus插件和条件构造器
  • 面试重难点问题(C++)