uniapp+vue3实现上传图片组件封装功能

 更新时间:2024年07月21日 11:25:39   作者:全栈^_^小菜鸟  
这篇文章主要介绍了uniapp+vue3实现上传图片组件封装功能,首先创建一个 components 文件在里面进行组件的创建,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下

首先创建一个 components 文件在里面进行组件的创建 

下面是 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';  
// 定义响应式数据  
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(['拍摄', '相册', '拍摄或相册']);  
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 = ['拍摄', '相册', '拍摄或相册'];  
});  
// 方法  
function chooseVideoImage() {  
  uni.showActionSheet({  
    title: '选择上传类型',  
    itemList: ['图片'], // 注意:这里只有'图片',如果需要视频应添加'视频'  
    success: res => {  
      if (res.tapIndex === 0) {  
        chooseImages();  
      }  
      // 注意:原代码中没有实现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, // 假设你通过某种方式传递了图片的URL  
	current:  e, // 假设你通过某种方式传递了图片的URL
    urls: imageList.value  
  });  
}  
// 删除图片的函数  
function delect(index) {  
  uni.showModal({  
    title: '提示',  
    content: '是否要删除该图片',  
    success: res => {  
      if (res.confirm) {  
        // 使用splice方法删除图片,注意需要访问.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">
	/* 统一上传后显示的盒子宽高比 */
	.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>

直接在页面引用

<view class="imgbox">
			<view class="example-body">
				<!-- <uni-file-picker limit="9" title="最多选择9张图片"></uni-file-picker> -->
				<div>选择照片-最多只能选择九张</div>
				<vip></vip>  //上传图片的组件
			</view>
		</view>

最终样子

到此这篇关于uniapp,vue3上传图片组件封装的文章就介绍到这了,更多相关vue3上传图片组件封装内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue2(三)实现子菜单展开收缩,带动画效果实现方法

    Vue2(三)实现子菜单展开收缩,带动画效果实现方法

    这篇文章主要介绍了vue实现收缩展开效果的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Vue数据更新视图未更新的几种解决方案

    Vue数据更新视图未更新的几种解决方案

    本文主要介绍在vue项目中,遇到数据更新但视图不更新的情况时,无法使用watch监听、无法使用this.$set方法,同时使用this.$forceUpdate()无效时,所使用的解决方案,需要的朋友可以参考下
    2024-02-02
  • 详解Vue3常用的6种组件通信方式

    详解Vue3常用的6种组件通信方式

    我们用Vue3开发项目时,常常需要面对的一个问题就是组件之间的通信,如何将数据发给对应的组件,这是不可避免的一个问题,该篇讲述了Vue3常用的6种组件通信方式,需要的朋友可以参考下
    2024-09-09
  • 使用Vue.js报错:ReferenceError: “Vue is not defined“ 的原因与解决方案

    使用Vue.js报错:ReferenceError: “Vue is not d

    在前端开发中,ReferenceError: "Vue is not defined" 是一个常见的错误,该错误通常发生在项目中未正确引入 Vue.js 框架或代码配置存在问题时,本篇文章将详细分析该错误的成因,并提供多种解决方案,帮助开发者快速排查问题,需要的朋友可以参考下
    2024-12-12
  • VUE中如何优雅实现爷孙组件的数据通信

    VUE中如何优雅实现爷孙组件的数据通信

    所谓祖孙组件,也就是3层嵌套的组件,下面这篇文章主要给大家介绍了关于VUE中如何优雅实现爷孙组件的数据通信的相关资料,需要的朋友可以参考下
    2022-04-04
  • vue.js绑定class和style样式(6)

    vue.js绑定class和style样式(6)

    这篇文章我们将一起学习vue.js实现绑定class和style样式,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • 安装@vue/cli报错npmERR gyp ERR问题及解决

    安装@vue/cli报错npmERR gyp ERR问题及解决

    这篇文章主要介绍了安装@vue/cli报错npmERR gyp ERR问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • 使用Vue编写一个日期选择器

    使用Vue编写一个日期选择器

    这篇文章主要为大家详细介绍了如何使用Vue编写一个简单的日期选择器,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • Vue组件传参11种方式举例介绍

    Vue组件传参11种方式举例介绍

    这篇文章主要给大家介绍了关于Vue组件传参11种方式的相关资料,文中通过代码示例介绍的非常详细,对大家学习或者使用vue具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • 解决Vue项目Network: unavailable的问题

    解决Vue项目Network: unavailable的问题

    项目只能通过Local访问而不能通过Network访问,本文主要介绍了解决Vue项目Network: unavailable的问题,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06

最新评论