vant weapp 多选上传图片_微信小程序结合vant weapp ui实现多图上传组件
微信小程序多图上传
最近在写小程序的商品上传,为方便需要使用多张图片的上传的功能。因为小程序不支持数组的多张图片同时上传,然后根据自己的需求创建了一个组件希望能够帮到大家
效果图
创建一个图片上传的promise
uploadFilePromise(filePath, Authorization) {
return new Promise(function(resolve, reject) {
wx.uploadFile({
url: `${DOMAIN}File/Image/upload`,
filePath,
name: 'file',
header: {
Authorization,
},
success: res => {
// 触发图片上传事件
let data = JSON.parse(res.data);
if (data.code != SUCCESS_CODE) { //SUCCESS_CODE为本项目请求成功的判断无需在意
wx.showToast({
title: data.message || '上传失败',
icon: 'none'
})
} else {
resolve(res)
}
},
fail: res => {
reject(res)
}
});
})
},
创建一个promise.all (多个图片上传成功后再改变dom)
chooseImage(){
wx.chooseImage({
count,
sizeType: ['original', 'compressed'],
sourceType: ['album', 'camera'],
success(res) {
const tempFilePaths = res.tempFilePaths; //拿到选择的图片地址
that.triggerEvent('disableBtn', {}, {}); //上传过程中禁用父组件中的保存按钮,防止图片未上传成功
let promiseList = tempFilePaths.map(temp => that.uploadFilePromise(temp, Authorization)); //获取promise 队列数组
Promise.all(promiseList).then((result) => {
let uploadImgList = result.map(item => ({ file_key: JSON.parse(item.data).data.key, url: JSON.parse(item.data).data.url })).reverse();
imgList.unshift(...uploadImgList); //将新上传的图片从头部插入原图片数组中
that.triggerEvent('Upload', { imgList, key }) //上传成功将新的图片数组给到组件
})
}
})
}
完整js 文件
import Dialog from '../../../../miniprogram_npm/@vant/weapp/dialog/dialog';
import {
DOMAIN,
TOKEN_KEY,
SUCCESS_CODE
} from "../../../../configs";
Component({
/**
* 组件的属性列表
*/
properties: {
imgList: { //图片列表
type: [Array],
value: [],
},
max: { //最大可以上传数
type: [Number],
value: 10
},
key: { //图片列表key
type: [String],
value: ''
}
},
/**
* 组件的初始数据
*/
data: {
},
methods: {
upload(e) {
const {key,max} = e.target.dataset;
let imgList = this.data.imgList,
listLen=imgList.length,
count = parseInt(max - listLen) > 9 ? 9 : parseInt(max - listLen),
that = this;
var Authorization = wx.getStorageSync(TOKEN_KEY);
if (listLen >= max) {
wx.showToast({
title: `最多上传${max}张图片`,
icon: 'none',
duration: 2000
});
return false;
}
wx.chooseImage({
count,
sizeType: ['original', 'compressed'],
sourceType: ['album', 'camera'],
success(res) {
const tempFilePaths = res.tempFilePaths;
that.triggerEvent('disableBtn', {}, {});
let promiseList = tempFilePaths.map(temp => that.uploadFilePromise(temp, Authorization));
Promise.all(promiseList).then((result) => {
let uploadImgList = result.map(item => ({ file_key: JSON.parse(item.data).data.key, url: JSON.parse(item.data).data.url })).reverse();
imgList.unshift(...uploadImgList);
that.triggerEvent('Upload', { imgList, key })
})
}
})
},
uploadFilePromise(filePath, Authorization) {
return new Promise(function(resolve, reject) {
wx.uploadFile({
url: `${DOMAIN}File/Image/upload`,
filePath,
name: 'file',
header: {
Authorization,
},
success: res => {
// 触发图片上传事件
let data = JSON.parse(res.data);
if (data.code != SUCCESS_CODE) {
wx.showToast({
title: data.message || '上传失败',
icon: 'none'
})
} else {
resolve(res)
}
},
fail: res => {
reject(res)
}
});
})
},
delete(e) {
const { key, index } = e.target.dataset;
Dialog.confirm({
selector: '#create-dialog',
title: '提示',
message: '确认删除该图吗?'
}).then(() => {
this.triggerEvent('Delete', {key,index})
}).catch(() => {
// on cancel
})
},
}
})
创建一个wxml
删除
写上样式wxss
.product-img-list {
display: flex;
flex-wrap: wrap;
}
.product-img-list .img-box {
width: 100rpx;
margin-right: 24rpx;
display: flex;
flex-direction: column;
align-items: center;
color: #909090;
font-size: 28rpx;
margin-top: 32rpx;
}
.img-box .product-img{
width: 100rpx;
height: 100rpx;
margin-bottom: 24rpx;
}
.add-image-icon {
width: 100rpx;
height: 100rpx;
margin-top: 32rpx;
}
父组件的调用–wxml
7.父组件的调用 --js
//上传图片
uploadProImg(e) {
let form = this.data.form,
key = e.detail.key,
imgList = e.detail.imgList;
form[key] = imgList;
this.setData({ form, btnDisabled: false })
},
//上传按钮禁用
disableBtn(e) {
this.setData({ btnDisabled: true })
},
//删除图片
deleteProImg(e) {
let form = this.data.form,
key = e.detail.key,
index = e.detail.index,
keyList = form[key];
keyList.splice(index, 1);
form[key] = keyList;
this.setData({ form })
},
vant weapp 多选上传图片_微信小程序结合vant weapp ui实现多图上传组件相关推荐
- vant weapp 多选上传图片_微信小程序使用Vant Weapp组件库的方法步骤
地址:https://youzan.github.io/vant/#/zh-CN/intro 一.引入Vant组件库 1.首先运行 npm init 就会生成 package.json 2.运行 np ...
- vant weapp 多选上传图片_微信小程序:使用vant实现上传图片功能
使用vant的Uploader组件 我们使用上传的组件是vant-weapp,这样可以大大的提高我们的开发效率.使用Uploader组件首先在全局配置app.js引入该组件,也可以在页面配置json中 ...
- 微信小程序云开发CMS内容管理平台csv上传乱码或失败的解决方法
一.新建Excel并编辑数据: 二.Excel 编辑好后另存为csv文件(直接导入微信小程序云开发数据库会出现中文乱码): 三.csv文件直接改后缀名为.txt,然后用记事本打开(如首行出现空字段需删 ...
- [微信小程序]WebView内嵌H5实现本地文件上传
[官方文档] 小程序与H5如何互相跳转 小程序与H5交互以上传文件为例 微信小程序开放能力web-view使用之h5页面与小程序页面交互传值 快速小程序开发之微信小程序内嵌 H5 微信小程序web-v ...
- 微信小程序选择手机相册里的图片并上传到页面
微信小程序获取手机相册里的图片并传到页面上 index.wxml代码 // 相册中的照片 <button bindtap='handleChooseAlbum'>选中图片</butt ...
- 微信小程序富文本编辑器editor初体验-图片上传
https://developers.weixin.qq.com/miniprogram/dev/component/editor.html 以前没有小程序富文本编辑器,只能输入文字,图片上传后,在服 ...
- java微信上传图片_微信小程序图片上传java后台(前后端代码)
小程序代码 upload:function(e){ var that = this; wx.showActionSheet({ itemList: ['从相册选择','拍照'], itemColor: ...
- 【微信小程序云开发】1分钟学会实现上传、下载、预览、删除图片,并且以九宫格展示图片
大家好,我叫小秃僧 这篇文章是讲解云开发如何上传.下载.预览.删除图片,并且以九宫格展示图片的功能 学习目录 1. 实现效果 2.JavaScript代码 3.wxml代码 4.wxss代码 1. 实 ...
- 微信提交表单到服务器,微信小程序页面表单如何跟图片一起上传服务器
拆开写. 表单提交是 wx.request 上传图片是 wx.uploadFile 你需要写一个通用图片上传接口,上传图片后台返回图片的url.这个通用接口在任何需要提交图片的表单都可以用到. 添加图 ...
最新文章
- Linux下软件安装方法汇总
- mysql如何快速插入一千万条数据_如何快速安全的插入千万条数据?
- 渲染服务器位置,如何用服务器做渲染
- ROS配置分布式通信
- (STL,set)安迪的第一个字典
- struts国际化java_java框架篇---Struts2 本地化/国际化(i18n)
- 36.母板的介绍与使用
- opengl (1) 基本API的熟悉
- Redis集群方案介绍
- VB中常用的的ASCII码chr()对应表
- php 发送curl跨域请求,php跨域传输(curl)
- Win10下安装GrADS
- jQuery Mobile 【弹窗】
- quicktime ogv_Windows的QuickTime已死,应卸载以确保安全
- 阿里达摩院发布2019十大科技趋势:数字身份将成为第二张身份证
- oracle12c性能测试,Oracle12c IMO 测试
- Android进程永生技术终极揭秘:进程被杀底层原理、APP应对技巧
- [AHK]通达信联动到同花顺下单
- 欧拉角、四元数与旋转
- 【Python】进制、计算机中的单位、编码、数据类型、索引、字符串切片、字符串的功能方法