elUpload里的很多回调方法,对于同一个项目来说,很多都是共用的和重复的.所以针对自家项目稍微做了封装,

简单实现了:1.图片大小,数量限制和提示,2.超出数量隐藏上传按钮的功能.3.校验必填

不足:图片是立刻上传而不是确认后上传 ,比较占用资源,后续希望优化这部分.

代码:

<template><div><el-uploadaccept="image/png, image/jpg, image/jpeg"name="multipartFile"list-type="picture-card"multiple:limit="limitNum":action="uploadApi":headers="headers":data="typeData":file-list="fileList":before-upload="beforeUpload":on-change="handleChange":on-exceed="handleExceed":on-success="handleSuccess":on-remove="handleRemove":on-error="handleError"><i class="el-icon-plus addMore"></i></el-upload><p>只能上传jpg/png格式文件,文件不能超过50kb</p></div>
</template>
<script>import {getAccessToken} from '@/utils'import config from "@/config"export default {name: 'PictureUpload',computed: {headers() {const token = getAccessToken()return {Authorization: token};},},watch: {initPics(val){this.picStr = valthis.initFileList()}},other: { //深度观察对象handler(val){},deep: true},props: {limitNum: {type: Number,default: 1},limitSize: {type: Number,default: 3},uploadApi: {type: String,default: ""},typeData: {type: Object,default: null},initPics: {type: String,default: ""}},data(){return {fileList: [],//当前页面显示的图片列表picList: [], //用于保存符合格式的当前页面显示的图片列表picStr: ""}},methods: {initFileList(){const params = this.initPicsif (params.length > 0) {this.fileList = params.split(";").map(value => {return {url: url + value}})}this.hideOrShowAddMoreIcon(this.fileList)},emitChange(){this.$emit("onChange", this.picStr)},beforeUpload(file){return this.checkBeforeUpload(file)},handleChange(file, fileList){this.hideOrShowAddMoreIcon(fileList)},handleExceed(file, fileList){this.$message({message: '最多上传' + this.limitNum + '张', type: "warning"})},handleSuccess(res, file, fileList){let arr = []let oldPicStr = this.picStrarr.push(res.data.name)arr.unshift(oldPicStr)if (oldPicStr == "") {this.picStr = arr.join(";").slice(1)} else {this.picStr = arr.join(";")}this.picList = arr},handleRemove(file, fileList){let arr = []fileList.forEach(element => {let url = ''if (typeof(element.response) != "undefined") {url = element.response.data.name} else {url = element.url.split('=')[1]}if (url != undefined) {arr.push(url)}})this.picStr = arr.join(";")this.picList = arrthis.hideOrShowAddMoreIcon(fileList)},handleError(err, file, fileList){this.hideOrShowAddMoreIcon(fileList)},checkBeforeUpload(file){const isJPGorPNG = file.typeconst isLt = (file.size / 1024 / 1024) < this.limitSizevar flag = trueif (isJPGorPNG !== 'image/jpeg' && isJPGorPNG !== 'image/png') {this.$message.error('上传图片只能是JPG或者PNG格式!')flag = false}if (!isLt) {this.$message({showClose: true,message: '图片: ' + file.name + ' 太大,请压缩后再上传!',type: 'warning'})flag = false}return flag},hideOrShowAddMoreIcon(fileList){let a = document.getElementsByClassName('addMore')[0]if (a) {let parentElement = a.parentNodeif (fileList.length >= this.limitNum) {parentElement.style.display = "none"} else {parentElement.style.display = "inline-block"}}this.emitChange()}}}
</script>

其中,import 的是项目获取本地token;config里获取项目路径.如果是小白,可直接把这两个属性也绑定到props上,通过父传子的方法使用.

使用方法:

在父组件:

1.引入:import PictureUpload from 'components/PictureUpload'
2.组件:<el-form-item label="图片:" prop="pics"><picture-uploadlist-type="picture-card"name="multipartFile"accept="image/png, image/jpg, image/jpeg":limitNum="limitNum":typeData="typeData":uploadApi="uploadApi":initPics = "initPics"@onChange="change"></picture-upload></el-form-item>
3.change方法:change(childValue){this.form.pics = childValue           // 回传给form表单的值// this.$refs.form.validateField('pics') // 这里可以触发自己定义的必填校验},
4.data(){return{limitNum:3,initPics:"",uploadApi: "http://xxxxx",typeData: {type: 'topic'}, }
}
5.校验 rules: { pics: [ { required: true, validator: this.picCheck , trigger: 'blur'}]}
6.picCheck方法:picCheck(rule,value,callback){ //方法内规则可以自定义if(this.form.pics.trim().length>0){ //至少上传一张校验callback()                    }else{callback(new Error('请上传至少一张图片!'));}}

vue 封装饿了么文件上传组件实现图片上传相关推荐

  1. (vue+【饿了么UI】tag组件封装)

    (vue+[饿了么UI]tag组件封装) 根据项目所衍生的一种tag组件,废话不多说直接上代码 <template> <div><!-- 素材标签 --><d ...

  2. Vue项目实战之人力资源平台系统(十)图片上传和打印员工信息

    前言 目录 前言 一.配置腾讯云空间存储图片 1.1 配置步骤 二.图片上传流程解析 三.实现文件上传组件 3.1 安装依赖 3.2 上传图片组件的基本布局 3.3 全局注册组件 3.4 点击图片进行 ...

  3. vue富文本编辑,编辑自动预览,单个图片上传不能预览的问题解决:

    vue富文本编辑,编辑自动预览,单个图片上传不能预览的问题解决: 参考文章: (1)vue富文本编辑,编辑自动预览,单个图片上传不能预览的问题解决: (2)https://www.cnblogs.co ...

  4. php上传图片限制类型,php,_使用php的图片上传类进行图片上传,总是提示:上传文件时出错 : 未允许类型 。都是默认的配置,php - phpStudy...

    使用php的图片上传类进行图片上传,总是提示:上传文件时出错 : 未允许类型 .都是默认的配置 使用php的图片上传类进行图片上传,总是提示:上传文件时出错 : 未允许类型 .都是默认的配置 $upl ...

  5. java 图片上传_java web图片上传和文件上传实例

    本篇文章主要介绍了java web图片上传和文件上传实例,具有一定的参考价值,有需要的可以了解一下. 图片上传和文件上传本质上是一样的,图片本身也是文件.文件上传就是将图片上传到服务器,方式虽然有很多 ...

  6. php 图片上传 水印,PHP - 图片上传并添加水印

    一个的面向过程的 PHP 图片上传并对其添加文字水印的功能. 还有很多待需完善的地方. index.php $conn=@mysql_connect("localhost",&qu ...

  7. antd的联级选择器异步调用编辑回显_react-uplod-img 是一个基于 React antd组件的图片上传组件...

    react-uplod-img 是一个基于 React antd组件的图片上传组件 支持oss qiniu等服务端自定义获取签名,批量上传, 预览, 删除, 图片精确的尺寸限制 排序等功能 需要 re ...

  8. SpringBoot 使用MultipartFile上传组件实现本地上传用户头像

    GIF动图展示 SpringBoot 使用MultipartFile上传组件实现本地上传用户头像GIF效果图 本章目录 GIF动图展示 主要实现思路 1.使用MultipartFile需要引入的依赖 ...

  9. 对于 React 结合 Antd 的 Upload 组件实现图片上传

    一. React 结合 Antd 实现图片上传 引入所需相关的组件和文件,代码如下所示: import React, { Component } from 'react' import PropTyp ...

最新文章

  1. 服务器报错:“/usr/local/var/run/nginx.pid”failed
  2. DNN:DL讨论与DNN经典论文汇总
  3. 六级核心词汇pdf_人民日报总结的500个四六级【核心词汇】,祝你一次必过!
  4. 新闻更新延时引发的学习,CACHE的利用。
  5. 怎么在百度里通过关键词搜索到自己的网站
  6. 字符编码 ASCII,Unicode和UTF-8的关系
  7. SSM-水果商城-导入项目-学习-2
  8. <c++STL>: map的常见用法
  9. php curl exec ch,PHP curl_exec函数
  10. 【吴恩达机器学习】正则化
  11. 依图科技发布语音开放平台,联袂微软、华为撬动语音市场
  12. WinServer服务器IP访问白名单设置
  13. Java--Mac系统终端编译运行java文件
  14. 初学者的长角牛的攻击和防御实验
  15. 【无极低码】低代码平台开发日记,低代码平台之sql编程
  16. java系统架构设计,2022最新
  17. 共阴极和共阳极数码管显示的十六进制代码
  18. Trac使用之 — Ticket
  19. 1400亿改造大明宫遗址区 西安将建城市中央公园
  20. Android webview加载页面获取摄像头权限实践(Kotlin)

热门文章

  1. 物联网发展方向(复制来的)
  2. ENQUEUE_MIGRATED
  3. 哪个主板可供选择?ATX,Micro-ATX还是Mini-ITX?
  4. 技能 |【点滴知识】如何在跟催任务时使用EXCEL进度条?
  5. iOS根据生日判断星座
  6. ARM cache 结构与访问方式
  7. 目标检测中的precision,recall,AP,mAP计算详解
  8. Otterctf 2018 内存取证
  9. 微信小程序-贪吃蛇开发4 wxml和wxss学习
  10. 学习爬虫第二天 requests库