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 相关文章推荐
超级24小时弹窗代码 24小时退出弹窗代码 100%弹窗代码(IE only)
Jun 11 Javascript
Javascript学习笔记 delete运算符
Sep 13 Javascript
javascript图片相似度算法实现 js实现直方图和向量算法
Jan 14 Javascript
IE下双击checkbox反应延迟问题的解决方法
Mar 27 Javascript
jquery超简单实现手风琴效果的方法
Jun 05 Javascript
jquery图片滚动放大代码分享(2)
Aug 28 Javascript
angular.bind使用心得
Oct 26 Javascript
jQuery实现选项卡切换效果简单演示
Dec 09 Javascript
js实现页面跳转的五种方法推荐
Mar 10 Javascript
JS 获取HTML标签内的子节点的方法
Sep 21 Javascript
禁止弹窗中蒙层底部页面跟随滚动的几种方法
Dec 07 Javascript
JavaScript数组reduce()方法的语法与实例解析
Jul 07 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 中英文混合排版中处理字符串常用的函数
2007/04/12 PHP
PHP安全防范技巧分享
2011/11/03 PHP
PHP中如何实现常用邮箱的基本判断
2014/01/07 PHP
学习YUI.Ext第七日-View&amp;JSONView Part Two-一个画室网站的案例
2007/03/10 Javascript
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
jQuery操作cookie方法实例教程
2014/11/25 Javascript
详解JavaScript语言的基本语法要求
2015/11/20 Javascript
EasyUI的doCellTip实现鼠标放到单元格上提示单元格内容
2016/08/24 Javascript
js正则表达式惰性匹配和贪婪匹配用法分析
2016/12/26 Javascript
vue2.0 datepicker使用方法
2018/02/04 Javascript
使用vue-cli打包过程中的步骤以及问题的解决
2018/05/08 Javascript
vue this.reload 方法 配置
2018/09/12 Javascript
微信小程序 button样式设置为图片的方法
2020/06/19 Javascript
修改Vue打包后的默认文件名操作
2020/08/12 Javascript
Python实现比较两个文件夹中代码变化的方法
2015/07/10 Python
Python3实现并发检验代理池地址的方法
2016/09/18 Python
浅谈flask截获所有访问及before/after_request修饰器
2018/01/18 Python
python装饰器-限制函数调用次数的方法(10s调用一次)
2018/04/21 Python
详解python pandas 分组统计的方法
2019/07/30 Python
numpy.meshgrid()理解(小结)
2019/08/01 Python
Python 调用 Outlook 发送邮件过程解析
2019/08/08 Python
Python日志syslog使用原理详解
2020/02/18 Python
python在一个范围内取随机数的简单实例
2020/08/16 Python
html5+CSS3+JS实现七夕言情功能代码
2017/08/28 HTML / CSS
纽约复古灵感的现代珠宝品牌:Lulu Frost
2018/03/03 全球购物
Lacoste澳大利亚官网:服装、鞋类及配饰
2018/11/14 全球购物
Why we need EJB
2016/10/20 面试题
土木工程专业自荐信
2013/10/04 职场文书
应届本科生推荐信范文
2013/12/25 职场文书
演讲稿开场白
2014/01/13 职场文书
大学生就业求职信
2014/06/12 职场文书
法定代表人授权委托书范文
2014/09/22 职场文书
团拜会主持词
2015/07/04 职场文书
先进工作者主要事迹材料
2015/11/03 职场文书
上个世纪50年代的可穿戴技术:无线电帽子
2022/02/18 无线电
python在package下继续嵌套一个package
2022/04/14 Python