uniapp+vue3實(shí)現(xiàn)上傳圖片組件封裝功能
首先創(chuàng)建一個(gè) components 文件在里面進(jìn)行組件的創(chuàng)建

下面是 vip組件的封裝 也就是圖片上傳組件 只是我的命名是隨便起的
<template>
<!--圖片 -->
<view class="up-page">
<!--圖片-->
<view class="show-box" v-for="(item,index) in imageList" :key="index">
<image class="full" :src="item" :data-src="image" @tap="previewImage(item)">
</image>
<view class="delect-icon" @tap="delect(index)">
<image class="full" :src="clearIcon" mode=""></image>
</view>
</view>
<view v-if="VideoOfImagesShow" @tap="chooseVideoImage" class="box-mode">
<image class="full" :src="selectfile" mode=""></image>
</view>
</view>
</template>
<script setup>
import { ref,onUnmounted } from 'vue';
// 定義響應(yīng)式數(shù)據(jù)
const clearIcon = ref('../../static/xxx.png');
const selectfile = ref('../../static/jiahao.png');
const VideoOfImagesShow = ref(true);
const imageList = ref([]);
const videoList = ref([]);
const sourceType = ref(['拍攝', '相冊(cè)', '拍攝或相冊(cè)']);
const sourceTypeIndex = ref(2);
const cameraList = ref([
{ value: 'back', name: '后置攝像頭', checked: 'true' },
{ value: 'front', name: '前置攝像頭' }
]);
const cameraIndex = ref(0);
const maxCount = ref(9);
// 生命周期鉤子(onMounted, onUnmounted等)
onUnmounted(() => {
imageList.value = [];
sourceTypeIndex.value = 2;
sourceType.value = ['拍攝', '相冊(cè)', '拍攝或相冊(cè)'];
});
// 方法
function chooseVideoImage() {
uni.showActionSheet({
title: '選擇上傳類型',
itemList: ['圖片'], // 注意:這里只有'圖片',如果需要視頻應(yīng)添加'視頻'
success: res => {
if (res.tapIndex === 0) {
chooseImages();
}
// 注意:原代碼中沒(méi)有實(shí)現(xiàn)chooseVideo,這里未添加
}
});
}
function chooseImages() {
uni.chooseImage({
count: maxCount.value,
sizeType: ['original', 'compressed'],
sourceType: ['album', 'camera'],
success: res => {
imageList.value = [...imageList.value, ...res.tempFilePaths];
if (imageList.value.length + videoList.value.length === maxCount.value) {
VideoOfImagesShow.value = false;
}
}
});
}
function previewImage(e) {
uni.previewImage({
// current: e.currentTarget.dataset.url || e, // 假設(shè)你通過(guò)某種方式傳遞了圖片的URL
current: e, // 假設(shè)你通過(guò)某種方式傳遞了圖片的URL
urls: imageList.value
});
}
// 刪除圖片的函數(shù)
function delect(index) {
uni.showModal({
title: '提示',
content: '是否要?jiǎng)h除該圖片',
success: res => {
if (res.confirm) {
// 使用splice方法刪除圖片,注意需要訪問(wèn).value
imageList.value.splice(index, 1);
if (imageList.value.length+videoList.value.length == maxCount.value) {
VideoOfImagesShow.value = false;
} else {
VideoOfImagesShow.value = true;
}
}
}
});
}
</script>
<style lang="scss">
/* 統(tǒng)一上傳后顯示的盒子寬高比 */
.box-mode {
width: 27vw;
height: 27vw;
border-radius: 8rpx;
overflow: hidden;
}
.full {
width: 100%;
height: 100%;
}
.up-page {
display: flex;
flex-wrap: wrap;
display: flex;
width: 100%;
.show-box:nth-child(3n){
margin-right: 0;
}
.show-box {
position: relative;
margin-bottom:4vw;
margin-right: 4vw;
@extend .box-mode;
.delect-icon {
height: 40rpx;
width: 40rpx;
position: absolute;
right: 0rpx;
top: 0rpx;
z-index: 1000;
}
}
}
</style>直接在頁(yè)面引用
<view class="imgbox"> <view class="example-body"> <!-- <uni-file-picker limit="9" title="最多選擇9張圖片"></uni-file-picker> --> <div>選擇照片-最多只能選擇九張</div> <vip></vip> //上傳圖片的組件 </view> </view>
最終樣子


到此這篇關(guān)于uniapp,vue3上傳圖片組件封裝的文章就介紹到這了,更多相關(guān)vue3上傳圖片組件封裝內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
elementui[el-table]toggleRowSelection默認(rèn)多選事件無(wú)法選中問(wèn)題
這篇文章主要介紹了elementui[el-table]toggleRowSelection默認(rèn)多選事件無(wú)法選中問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
elementUI select組件value值注意事項(xiàng)詳解
這篇文章主要介紹了elementUI select組件value值注意事項(xiàng)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
詳解使用webpack打包編寫(xiě)一個(gè)vue-toast插件
本篇文章主要介紹了詳解使用webpack打包編寫(xiě)一個(gè)vue插件,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11
vue中beforeRouteLeave實(shí)現(xiàn)頁(yè)面回退不刷新的示例代碼
這篇文章主要介紹了vue中beforeRouteLeave實(shí)現(xiàn)頁(yè)面回退不刷新的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
vuex中store存儲(chǔ)store.commit和store.dispatch的用法
這篇文章主要介紹了vuex中store存儲(chǔ)store.commit和store.dispatch的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07
element-plus 下拉框?qū)崿F(xiàn)全選的示例代碼
本文主要介紹了element-plus 下拉框?qū)崿F(xiàn)全選的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05

