fix(Uploader): remove use-slot & catch upload error & fix prop capture not work (#2551)

fix #2541, fix #2544
This commit is contained in:
rex 2019-12-18 01:01:08 +08:00 committed by GitHub
parent 4527c31c6c
commit 1d93057061
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 60 additions and 44 deletions

View File

@ -87,10 +87,10 @@ Page({
### 自定义上传样式
`use-slot`属性设置为`true`通过插槽可以自定义上传区域的样式
通过插槽可以自定义上传区域的样式
```html
<van-uploader use-slot>
<van-uploader>
<van-button icon="photo" type="primary">上传图片</van-button>
</van-uploader>
```
@ -179,18 +179,20 @@ uploadFilePromise(fileName, chooseResult) {
| max-count | 文件上传数量限制 | *number* | - | - |
| upload-text | 上传区域文字提示 | *string* | - | - |
| image-fit | 预览图裁剪模式,可选值参考小程序`image`组件的`mode`属性 | *string* | `scaleToFill` | - |
| use-before-read | 是否开启文件读取前事件 | *boolean* | - | - |
### Slot
| 名称 | 说明 |
|-----------|-----------|
| - | 自定义上传样式 |
| - | 自定义上传区域 |
### Event
| 事件名 | 说明 | 回调参数 |
|-----------|-----------|-----------|
| bind:before-read | 文件读取前的回调函数,返回 `false` 可终止文件读取,绑定事件的同时需要将`use-before-read`属性设置为`true` | `event.detail.file`: 当前读取的文件,`event.detail.callback`: 回调函数,调用`callback(false)`终止文件读取 |
| bind:after-read | 文件读取完成后的回调函数 | `event.detail.file`: 当前读取的文件 |
| bind:oversize | 文件超出大小限制的回调函数 | - |
| bind:click-preview | 点击预览图片的回调函数 | `event.detail.index`: 点击图片的序号值 |
| bind:delete | 删除图片的回调函数 | `event.detail.index`: 删除图片的序号值 |
| bind:before-read | 文件读取前,在回调函数中返回 `false` 可终止文件读取,绑定事件的同时需要将`use-before-read`属性设置为`true` | `event.detail.file`: 当前读取的文件,`event.detail.callback`: 回调函数,调用`callback(false)`终止文件读取 |
| bind:after-read | 文件读取完成后 | `event.detail.file`: 当前读取的文件 |
| bind:oversize | 文件超出大小限制 | - |
| bind:click-preview | 点击预览图片 | `event.detail.index`: 点击图片的序号值 |
| bind:delete | 删除图片 | `event.detail.index`: 删除图片的序号值 |

View File

@ -9,6 +9,14 @@
flex-wrap: wrap;
}
&__slot:empty {
display: none;
}
&__slot:not(:empty) + &__upload {
display: none !important;
}
&__upload {
position: relative;
display: flex;

View File

@ -6,7 +6,6 @@ VantComponent({
disabled: Boolean,
multiple: Boolean,
uploadText: String,
useSlot: Boolean,
useBeforeRead: Boolean,
previewSize: {
type: null,
@ -20,6 +19,10 @@ VantComponent({
type: String,
value: 'image'
},
capture: {
type: Array,
value: ['album', 'camera']
},
fileList: {
type: Array,
value: [],
@ -72,9 +75,9 @@ VantComponent({
if (this.data.disabled) return;
const {
name = '',
capture = ['album', 'camera'],
maxCount = 100,
multiple = false,
capture,
maxCount,
multiple,
maxSize,
accept,
lists,
@ -104,43 +107,47 @@ VantComponent({
});
}
chooseFile.then(
(
res:
| WechatMiniprogram.ChooseImageSuccessCallbackResult
| WechatMiniprogram.ChooseMessageFileSuccessCallbackResult
) => {
const file = multiple ? res.tempFiles : res.tempFiles[0];
chooseFile
.then(
(
res:
| WechatMiniprogram.ChooseImageSuccessCallbackResult
| WechatMiniprogram.ChooseMessageFileSuccessCallbackResult
) => {
const file = multiple ? res.tempFiles : res.tempFiles[0];
// 检查文件大小
if (file instanceof Array) {
const sizeEnable = file.every(item => item.size <= maxSize);
if (!sizeEnable) {
// 检查文件大小
if (file instanceof Array) {
const sizeEnable = file.every(item => item.size <= maxSize);
if (!sizeEnable) {
this.$emit('oversize', { name });
return;
}
} else if (file.size > maxSize) {
this.$emit('oversize', { name });
return;
}
} else if (file.size > maxSize) {
this.$emit('oversize', { name });
return;
}
// 触发上传之前的钩子函数
if (useBeforeRead) {
this.$emit('before-read', {
file,
name,
callback: (result: boolean) => {
if (result) {
// 开始上传
this.$emit('after-read', { file, name });
// 触发上传之前的钩子函数
if (useBeforeRead) {
this.$emit('before-read', {
file,
name,
callback: (result: boolean) => {
if (result) {
// 开始上传
this.$emit('after-read', { file, name });
}
}
}
});
} else {
this.$emit('after-read', { file, name });
});
} else {
this.$emit('after-read', { file, name });
}
}
}
);
)
.catch(error => {
this.$emit('error', error);
});
},
deleteItem(event) {

View File

@ -38,13 +38,12 @@
<!-- 上传样式 -->
<block wx:if="{{ isInCount }}">
<view wx:if="{{ useSlot }}" class="van-uploader__slot" bind:tap="startUpload">
<view class="van-uploader__slot" bind:tap="startUpload">
<slot />
</view>
<!-- 默认上传样式 -->
<view
wx:else
class="van-uploader__upload"
style="width: {{ utils.addUnit(previewSize) }}; height: {{ utils.addUnit(previewSize) }};"
bind:tap="startUpload"