Vue开发之封装上传文件组件与用法示例


Posted in Javascript onApril 25, 2019

本文实例讲述了Vue开发之封装上传文件组件与用法。分享给大家供大家参考,具体如下:

使用elementui的 el-upload插件实现图片上传组件

每个项目存在一定的特殊性,所以数据的处理会不同

Vue开发之封装上传文件组件与用法示例

pictureupload.vue:

<template>
  <div class="pictureupload">
    <el-upload
        :action="baseUrl + '/api/public/image'"
        list-type="picture-card"
        :on-preview="handlePictureCardPreview"
        :on-remove="handleRemove"
        :file-list="fileList"
        :on-exceed="handleExceed"
        :before-remove="beforeRemove"
        name="img"
        :on-success="upLoadSuccess"
        :data="upLoadData"
        :headers="headers"
        :limit="limit">
      <i class="el-icon-plus"></i>
    </el-upload>
    <el-dialog :visible.sync="dialogVisible">
      <img width="100%" :src="dialogImageUrl" alt="">
    </el-dialog>
  </div>
</template>
<script>
import { getToken } from "@/utils/auth";
import store from "@/store";
export default {
  props: {
    imgList: {
      type: Array,
      default: []
    }, // 父组件传递的图片列表
    limit: "" // 图片数量限制
  },
  data() {
    return {
      fileList: [],
      upLoadData: {
        img: ""
      },
      baseUrl: process.env.BASE_API,
      dialogVisible: false,
      dialogImageUrl: "",
      headers: {
        Authorization: store.getters.token_type + " " + store.getters.token
      } // 接口调用token
    };
  },
  watch: {
    // 监听imgList的变化: fileList要求的格式为[{url: img}],所以监听imgList变化后将其进行处理,赋值给fileList
    imgList: {
      handler(newValue, oldValue) {
        if(newValue.length === 0) {
          this.fileList = [];
          return;
        }
        for (let i = 0; i < newValue.length; i++) {
          if (oldValue[i] != newValue[i]) {
            this.fileList = [];
            newValue.forEach(el => {
              this.fileList.push({url: el})
            })
            return;
          }
        }
      },
      deep: true
    }
  },
  methods: {
    // 图片移除时处理数据
    handleRemove(file, fileList) {
      let item = [];
      fileList.forEach(el => {
        item.push(el.url);
      });
      this.$emit("removeimg", item);
    },
    handlePictureCardPreview(file) {
      this.dialogImageUrl = file.url;
      this.dialogVisible = true;
    },
    // 判断图片数量
    handleExceed(files, fileList) {
      this.$message.warning(`当前限制选择 ${this.limit} 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
    },
    beforeRemove(file, fileList) {},
    // 上传图片成功事件
    upLoadSuccess(response) {
      this.$emit("uploadimg", response.message);
      this.$message("上传成功",);
    }
  },
  mounted() {
    if (this.imgList.length != 0) {
      this.imgList.forEach(el => {
        this.fileList.push({ url: el });
      });
    }
  }
};
</script>

使用上传图片组件:

<pictureupload @uploadimg="uploadimg" :imgList="ruleForm.img" :limit="3" @removeimg="removeimg"></pictureupload>
removeimg(item) {
  this.ruleForm.img = item;
},
uploadimg(item) {
  this.ruleForm.img.push(item);
},

希望本文所述对大家vue.js程序设计有所帮助。

Javascript 相关文章推荐
关于 byval 与 byref 的区别分析总结
Oct 08 Javascript
Javascript isArray 数组类型检测函数
Oct 08 Javascript
用unescape反编码得出汉字示例
Apr 24 Javascript
jquery 实现滚动条下拉时无限加载的简单实例
Jun 01 Javascript
Bootstrap登陆注册页面开发教程
Jul 12 Javascript
SVG描边动画
Feb 23 Javascript
微信小程序tabbar不显示解决办法
Jun 08 Javascript
详解JS模块导入导出
Dec 20 Javascript
npm 下载指定版本的组件方法
May 17 Javascript
基于Vue实现微信小程序的图文编辑器
Jul 25 Javascript
基于jquery实现九宫格拼图小游戏
Nov 30 jQuery
详解vue 自定义组件使用v-model 及探究其中原理
Oct 11 Javascript
vue2.0自定义指令示例代码详解
Apr 25 #Javascript
Vue开发之封装分页组件与使用示例
Apr 25 #Javascript
Vue注册组件命名时不能用大写的原因浅析
Apr 25 #Javascript
从零到一详聊创建Vue工程及遇到的常见问题
Apr 25 #Javascript
详解vue项目中调用百度地图API使用方法
Apr 25 #Javascript
Vue开发之watch监听数组、对象、变量操作分析
Apr 25 #Javascript
详解JS实现简单的时分秒倒计时代码
Apr 25 #Javascript
You might like
PHP 实现的将图片转换为TXT
2015/10/21 PHP
php快速导入大量数据的实例方法
2019/09/23 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
可实现多表单提交的javascript函数
2007/08/01 Javascript
初学JavaScript第二章
2008/09/30 Javascript
jquery 图片缩放拖动的简单实例
2014/01/08 Javascript
jquery取消选择select下拉框示例代码
2014/02/22 Javascript
基于javascript实现九宫格大转盘效果
2020/05/28 Javascript
深入理解Angular2 模板语法
2016/08/07 Javascript
Agularjs妙用双向数据绑定实现手风琴效果
2017/05/26 Javascript
jquery+css实现下拉列表功能
2017/09/03 jQuery
JavaScript反射与依赖注入实例详解
2018/05/29 Javascript
Node.js笔记之process模块解读
2018/05/31 Javascript
Node.js中的cluster模块深入解读
2018/06/11 Javascript
微信小程序实现动态显示和隐藏某个控件功能示例
2018/12/14 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
python封装对象实现时间效果
2020/04/23 Python
使用C#配合ArcGIS Engine进行地理信息系统开发
2016/02/19 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
Python多线程爬虫实战_爬取糗事百科段子的实例
2017/12/15 Python
python检测IP地址变化并触发事件
2018/12/26 Python
通过实例解析Python调用json模块
2019/12/11 Python
Python输出指定字符串的方法
2020/02/06 Python
Python使用windows设置定时执行脚本
2020/11/12 Python
使用CSS3编写类似iOS中的复选框及带开关的按钮
2016/04/11 HTML / CSS
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
荷兰牛仔裤网上商店:Jeans Centre
2018/04/03 全球购物
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
《小壁虎借尾巴》教学反思
2014/02/16 职场文书
英文求职信写作小建议
2014/02/16 职场文书
三严三实对照检查材料
2014/08/25 职场文书
《1942》观后感
2015/06/08 职场文书
vue3如何优雅的实现移动端登录注册模块
2021/03/29 Vue.js