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 相关文章推荐
lyhucSelect基于Jquery的Select数据联动插件
Mar 29 Javascript
一些有用的JavaScript和jQuery的片段分享
Aug 23 Javascript
也说JavaScript中String类的replace函数
Sep 22 Javascript
js 距离某一时间点时间是多少实现代码
Oct 14 Javascript
jQuery实现的支持IE的html滑动条
Mar 16 Javascript
javascript生成随机数方法汇总
Nov 12 Javascript
BootStrap 智能表单实战系列(五) 表单依赖插件处理
Jun 13 Javascript
Bootstrap的popover(弹出框)2秒后定时消失的实现代码
Feb 27 Javascript
jQuery实现radio第一次点击选中第二次点击取消功能
May 15 jQuery
详解在vue-cli项目下简单使用mockjs模拟数据
Oct 19 Javascript
在webstorm开发微信小程序之使用阿里自定义字体图标的方法
Nov 15 Javascript
js实现列表向上无限滚动
Jan 13 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 安全检测代码片段(分享)
2013/07/05 PHP
PHP使用json_encode函数时不转义中文的解决方法
2014/11/12 PHP
php的单例模式及应用场景详解
2021/02/27 PHP
jQuery 第二课 操作包装集元素代码
2010/03/14 Javascript
JavaScript中链式调用之研习
2011/04/07 Javascript
IE下使用cloneNode注意事项分享
2012/11/22 Javascript
js获取 type=radio 值的方法
2014/05/09 Javascript
给before和after伪元素设置js效果的方法
2015/12/04 Javascript
JavaScript面向对象程序设计教程
2016/03/29 Javascript
Node.js检测端口(port)是否被占用的简单示例
2016/09/29 Javascript
Node.js数据库操作之查询MySQL数据库(二)
2017/03/04 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
详解Angular2组件之间如何通信
2017/06/22 Javascript
NodeJS实现一个聊天室功能
2019/11/25 NodeJs
vue中使用极验验证码的方法(附demo)
2019/12/04 Javascript
Vue解析剪切板图片并实现发送功能
2020/02/04 Javascript
[23:21]Ti4 冒泡赛第二轮DK vs C9 2
2014/07/14 DOTA
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
python益智游戏计算汉诺塔问题示例
2014/03/05 Python
python使用正则表达式检测密码强度源码分享
2014/06/11 Python
python的绘图工具matplotlib使用实例
2014/07/03 Python
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
2016/08/30 Python
Python算法应用实战之栈详解
2017/02/04 Python
Python实现的计算马氏距离算法示例
2018/04/03 Python
python 除法保留两位小数点的方法
2018/07/16 Python
Python 带有参数的装饰器实例代码详解
2018/12/06 Python
Python实现求两个数组交集的方法示例
2019/02/23 Python
Python中bisect的使用方法
2019/12/31 Python
Transpose 数组行列转置的限制方式
2020/02/11 Python
Python OrderedDict字典排序方法详解
2020/05/21 Python
设置器与访问器的定义以及各自特点
2016/01/08 面试题
英文版销售经理个人求职信
2013/11/20 职场文书
小学生2015教师节演讲稿
2015/03/19 职场文书
交通事故协议书范本
2016/03/19 职场文书
Redis性能监控的实现
2021/07/09 Redis
Python加密技术之RSA加密解密的实现
2022/04/08 Python