unicloud上传组件例子(使用异步请求数据同步化处理【vue2】)
<template>
<view class="file">
<view class="uploadGroup">
<view class="box" v-for="(item,index) in temFiles" :key="index">
<image :src="item.path" mode="aspectFill" @click="clickImg(index)"></image>
<view class="close" @click="onClose(index)">×</view>
</view>
<view class="box add" @click="addFile" v-show="temFiles.length<maxSize">+</view>
</view>
<button @click="goUpload">确认上传</button>
</view>
</template>
<script>
export default {
data() {
return {
temFiles:[],
maxSize:9,
picArr:[]
}
},
methods: {
//点击上传到云存储
goUpload(){
let newsArr= this.temFiles.map(async item=>{
return await this.uploadFun(item)
})
Promise.all(newsArr).then(res=>{
let arr=res.map(item=>{
return item.fileID
})
this.picArr=arr;
console.log(this.picArr);
})
},
uploadFun(item){
return uniCloud.uploadFile({
filePath:item.path,
cloudPath:item.name
})
},
//点击预览图
clickImg(index){
let arr=this.temFiles.map(item=>{
return item.path
})
uni.previewImage({
current:index,
urls:arr
})
},
//点击删除
onClose(e){
this.temFiles.splice(e,1)
},
//选择本地图片
addFile(){
uni.chooseImage({
success:res=>{
console.log(res);
let oldTem=this.temFiles;
let nsTem=[...oldTem,...res.tempFiles]
nsTem=nsTem.slice(0,this.maxSize);
this.temFiles=nsTem
}
})
}
}
}
</script>
<style lang="scss" scoped>
.uploadGroup{
padding:30rpx;
display: flex;
flex-wrap: wrap;
.box{
width: 200rpx;
height: 200rpx;
background: #eee;
margin-right: 15rpx;
margin-bottom: 15rpx;
position: relative;
image{
width: 10 0%;
height: 10 0%;
}
.close{
position: absolute;
right: 0;
top:0;
width: 50rpx;
height: 50rpx;
background: rgba(0,0,0,0.7);
color:#fff;
border-radius: 0 0 0 80rpx;
display: flex;
justify-content: center;
align-items: center;
}
}
.add{
font-size: 80rpx;
display: flex;
align-items: center;
justify-content: center;
color:#888;
}
}
</style>上一篇:暂无数据
下一篇:Windows下安装及使用NVM


