Vue el-upload 组件多张图片上传并回显(无需添加样式)以及正确使用方式
vue
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
项目地址:https://gitcode.com/gh_mirrors/vu/vue
免费下载资源
·
MultiUpload 组件内容:
<template>
<div>
<el-upload
:action="uploadUrl()"
list-type="picture-card"
accept=".jpg,.jpeg,.png,.gif"
multiple
:file-list="fileList"
:on-remove="handleRemove"
:on-success="handleUploadSuccess"
:before-upload="handleBeforeUpload"
:on-preview="handlePreview"
:limit="maxCount"
:on-exceed="handleExceed"
>
<i class="el-icon-plus" />
</el-upload>
<el-dialog :visible.sync="dialogVisible">
<img width="100%" :src="dialogImageUrl" :alt="dialogImageName">
</el-dialog>
</div>
</template>
<script>
import { getImageUpload } from '@/api/badFruit'
export default {
name: 'MultiUpload',
props: {
// 图片属性数组
value: {
type: Array,
default: () => []
},
// 最大上传图片数量
maxCount: {
type: Number,
default: 5
}
},
data() {
return {
fileList: [],
imagesList: [],
images: [],
dialogVisible: false,
dialogImageUrl: null,
dialogImageName: '',
num: 0,
fileNum: 0
}
},
created() {
// 上传组件显示列表
this.fileList = this.value
// 图片保存数组
this.imagesList = this.value
},
methods: {
// 文件上传地址
uploadUrl() {
return getImageUpload
},
handleRemove(file, fileList) {
const list = JSON.parse(JSON.stringify(fileList))
this.imagesList = list.map(item => ({
name: item.name,
url: item.url
}))
this.$emit('input', this.imagesList)
},
handlePreview(file) {
this.dialogVisible = true
this.dialogImageUrl = file.url
this.dialogImageName = file.name
},
handleUploadSuccess(res, file) {
// console.log(res, file)
if (res.code === '200') {
const { message, path } = res.data
if (message === '图片上传成功') {
this.images.push({
name: file.name,
url: path
})
this.num++
if (this.num === this.fileNum) {
this.num = 0
this.fileNum = 0
// 这里如果 this.value.push(imageUrl) 这么写,vue会报出警告,大概意思是value作为props不应该在子组件中被修改
// 应该根据 value 得到新的值,而不能修改它,this.value.concat(imageUrl)也是可以的,concat方法返回新的数组
this.$emit('input', this.imagesList.concat(this.images))
this.images = []
}
}
}
},
handleBeforeUpload(file) {
this.fileNum++
console.log('上传个数:' + this.fileNum)
},
handleExceed(files, fileList) {
this.$message({
message: '最多只能上传' + this.maxCount + '张图片',
type: 'warning',
duration: 1000
})
}
}
}
</script>
<style scoped lang="scss">
</style>
使用方式:
// 模板
<el-form-item label="坏果图片">
<!--<el-input v-model="form.image" />-->
<multi-upload v-model="form.image" @input="getImages" />
</el-form-item>
// 方法
getImages(images) {
console.log(images)
this.form.image = images
},
GitHub 加速计划 / vu / vue
207.54 K
33.66 K
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:2 个月前 )
73486cb5
* chore: fix link broken
Signed-off-by: snoppy <michaleli@foxmail.com>
* Update packages/template-compiler/README.md [skip ci]
---------
Signed-off-by: snoppy <michaleli@foxmail.com>
Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 4 个月前
e428d891
Updated Browser Compatibility reference. The previous currently returns HTTP 404. 5 个月前
更多推荐
已为社区贡献2条内容
所有评论(0)