詳解vue如何封裝封裝一個(gè)上傳多張圖片的組件
上傳圖片不管是后臺(tái)還是前端小程序,上傳圖片都是一個(gè)比不可少的功能有時(shí)候需要好幾個(gè)頁面都要上傳圖片,每個(gè)頁面都寫一個(gè)非常不方便,這時(shí)候就沒有封裝起來用的方便。跟上我的步伐帶你了解如何封裝
首先:創(chuàng)建一個(gè)文件夾在components目錄下創(chuàng)建一個(gè)為UploadImage的文件夾,UploadImage文件夾下創(chuàng)建個(gè)文件我這里用index命名了。
在UploadImage的index文件中:
<template> <el-upload v-model:file-list="upload.fileList" :action="upload.action" list-type="picture-card" :before-upload="upload.before" :on-success="upload.success" :on-preview="upload.proview" :data-fileListCount="upload.fileList.length" :name="upload.name" :on-remove="upload.remove" :limit="upload.limit" :on-exceed="upload.exceed" class="UploadFile" data-cardSize="75px" > <el-icon> <Plus /> </el-icon> </el-upload> <el-image-viewer :url-list="upload.fileList.map((item) => item.url)" v-if="upload.dialogVisible" :initial-index="upload.index" @close="upload.dialogVisible = false" teleported /> </template> <script setup> import { reactive, watch } from 'vue'; import { Plus } from '@element-plus/icons-vue'; import { ElMessage } from 'element-plus'; const props = defineProps({ imageList: String, baseUrl: String, limit: Number, }); const { baseUrl } = { baseUrl: `http://sk.yyds.blue` } || { baseUrl: props.baseUrl, }; watch( () => props.imageList, (imageList) => { upload.fileList = imageList ? imageList.split(`,`).map((item) => { return { url: baseUrl + item, }; }) : []; console.log(upload.fileList); } ); const emit = defineEmits(['getImageUrl']); const upload = reactive({ limit: props.limit || 4, name: 'file', action: '/api/common/upload', fileList: props.imageList ? props.imageList.split(`,`).map((item) => { return { url: baseUrl + item, }; }) : [], dialogVisible: false, index: 0, exceed: () => { ElMessage({ type: 'warning', message: `最多上傳${upload.limit}張圖片` }); }, before: (file) => { const type = ['image/png', 'image/jpeg', 'image/gif']; if (!type.includes(file.type)) { ElMessage.error('不支持該類型文件'); return false; } }, proview: (file) => { const { url } = file; upload.index = upload.fileList.findIndex((item) => item.url === url); upload.dialogVisible = true; }, success: (res, uploadFile, uploadFiles) => { // console.log(uploadFiles); let imageList = uploadFiles .map((item) => { return { url: item.response && item.status === `success` ? item.response.data.url : item.url.split(baseUrl)[1], }; }) .map((item) => item.url) .join(','); emit('getImageUrl', imageList); ElMessage({ type: res.code === 1 ? `success` : 'warning', message: res.msg }); }, remove: (file, files) => { console.log(files); let imageList = files .map((item) => { return { url: item.response && item.status === `success` ? item.response.data.url : item.url.split(baseUrl)[1], }; }) .map((item) => item.url) .join(','); emit('getImageUrl', imageList); }, handleClickPreview: () => { console.log(1); }, }); </script> <style lang="scss"> // [data-fileListCount='5'] { // .el-upload--picture-card { // display: none !important; // } // } .UploadFile { display: flex; align-items: center; .el-upload-list--picture-card { // --el-upload-list-picture-card-size: 70px !important; .el-upload-list__item { margin-top: 0; margin-bottom: 0; } } .el-upload--picture-card { // --el-upload-picture-card-size: 70px !important; } .el-upload-dragger { height: 100%; display: grid; place-content: center; } } </style>
需要上傳圖片的頁面:
<template> <div class="name_inpasd" ><b>商品輪播:</b> <div class="asdasd"> <UploadImage @getImageUrl=" (fileList) => { avatar = fileList; } " :limit="2" :imageList="avatar" /> </div> </div> </template> <script setup> import UploadImage from '../../components/UploadImage/index.vue'; //引入創(chuàng)建的組件 const avatar = ref(``); //'/uploads/...png,/uploads/...jpg' console.log(avatar); </script>
打印console.log(avatar);可以直接拿到圖片路徑。由于圖片是上傳到我的服務(wù)器了所以拿過來的路徑直接就是網(wǎng)絡(luò)路徑。
到此這篇關(guān)于詳解vue如何封裝封裝一個(gè)上傳多張圖片的組件的文章就介紹到這了,更多相關(guān)vue封裝上傳圖片組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
node+vue前后端分離實(shí)現(xiàn)登錄時(shí)使用圖片驗(yàn)證碼功能
這篇文章主要介紹了node+vue前后端分離實(shí)現(xiàn)登錄時(shí)使用圖片驗(yàn)證碼,記錄前端使用驗(yàn)證碼登錄的過程,后端用的是node.js,關(guān)鍵模塊是svg-captcha,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11vue項(xiàng)目中跳轉(zhuǎn)到外部鏈接的實(shí)例講解
今天小編就為大家分享一篇vue項(xiàng)目中跳轉(zhuǎn)到外部鏈接的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-09-09Vue3+TypeScript+printjs實(shí)現(xiàn)標(biāo)簽批量打印功能的完整過程
最近在做vue項(xiàng)目時(shí)使用到了print-js打印,這里給大家分享下,這篇文章主要給大家介紹了關(guān)于Vue3+TypeScript+printjs實(shí)現(xiàn)標(biāo)簽批量打印功能的完整過程,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09基于vue-upload-component封裝一個(gè)圖片上傳組件的示例
這篇文章主要介紹了基于vue-upload-component封裝一個(gè)圖片上傳組件的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-10-10vue3+typescript實(shí)現(xiàn)圖片懶加載插件
這篇文章主要介紹了vue3+typescript實(shí)現(xiàn)圖片懶加載插件,幫助大家更好的理解和使用vue,感興趣的朋友可以了解下2020-10-10vue3中遇到reactive響應(yīng)式失效的問題記錄
這篇文章主要介紹了vue3中遇到reactive響應(yīng)式失效的問題記錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06Vue3使用src動(dòng)態(tài)引入本地圖片的詳細(xì)步驟
這篇文章主要給大家介紹了關(guān)于Vue3使用src動(dòng)態(tài)引入本地圖片的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-12-12