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 相关文章推荐
一个js写的日历(代码部分网摘)
Sep 20 Javascript
document.documentElement和document.body区别介绍
Sep 16 Javascript
JavaScript实现多维数组的方法
Nov 20 Javascript
js跨域问题浅析及解决方法优缺点对比
Nov 08 Javascript
JQuery validate插件Remote用法大全
May 15 Javascript
Bootstrap3 input输入框插入glyphicon图标的方法
May 16 Javascript
JavaScript注册时密码强度校验代码
Jun 30 Javascript
浅谈如何使用webpack构建多页面应用
May 30 Javascript
Vue常用指令详解分析
Aug 19 Javascript
JS与SQL方式随机生成高强度密码示例
Dec 29 Javascript
vue生命周期的探索
Apr 03 Javascript
vue实现修改图片后实时更新
Nov 14 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中对数据库操作的封装
2006/10/09 PHP
PHP常用处理静态操作类
2015/04/03 PHP
你不知道的文件上传漏洞php代码分析
2016/09/29 PHP
php接口隔离原则实例分析
2019/11/11 PHP
IE与firefox之jquery用法区别
2008/10/03 Javascript
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
js调用webservice中的方法实现思路及代码
2013/02/25 Javascript
简介JavaScript中的sub()方法的使用
2015/06/08 Javascript
js运动事件函数详解
2016/10/21 Javascript
Bootstrap导航条的使用和理解3
2016/12/14 Javascript
树结构之JavaScript
2017/01/24 Javascript
EasyUI的DataGrid绑定Json数据源的示例代码
2017/12/16 Javascript
js中getter和setter用法实例分析
2018/08/14 Javascript
layui结合form,table的全选、反选v1.0示例讲解
2018/08/15 Javascript
Vue 实现展开折叠效果的示例代码
2018/08/27 Javascript
原生JS实现的简单小钟表功能示例
2018/08/30 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
vue项目打包后请求地址错误/打包后跨域操作
2020/11/04 Javascript
原生JS实现pc端轮播图效果
2020/12/21 Javascript
JavaScript canvas实现文字时钟
2021/01/10 Javascript
Python实例之wxpython中Frame使用方法
2014/06/09 Python
python实现下载文件的三种方法
2017/02/09 Python
python 列表递归求和、计数、求最大元素的实例
2018/11/28 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
PyTorch的Optimizer训练工具的实现
2019/08/18 Python
用Python去除图像的黑色或白色背景实例
2019/12/12 Python
python如何写出表白程序
2020/06/01 Python
python如何爬取动态网站
2020/09/09 Python
亚洲在线旅行门户网站:Expedia.com.hk(智游网)
2020/04/14 全球购物
说出数据连接池的工作机制是什么?
2013/04/19 面试题
旅游管理本科生求职信
2013/10/14 职场文书
国旗下的讲话演讲稿
2014/05/08 职场文书
2014年师德承诺书
2014/05/23 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
高三化学教学反思
2016/02/22 职场文书
深入浅析React中diff算法
2021/05/19 Javascript