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 相关文章推荐
jquery购物车实时结算特效实现思路
Sep 23 Javascript
jquery 使用简明教程
Mar 05 Javascript
javascript实现获取浏览器版本、操作系统类型
Jan 29 Javascript
Angularjs制作简单的路由功能demo
Apr 14 Javascript
jQuery遍历页面所有CheckBox查看是否被选中的方法
Apr 14 Javascript
jQuery使用zTree插件实现树形菜单和异步加载
Feb 25 Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
Jun 06 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
Aug 30 Javascript
jQuery动画_动力节点节点Java学院整理
Jul 04 jQuery
Node.js爬取豆瓣数据实例分析
Mar 05 Javascript
ES6 Object.assign()的用法及其使用
Jan 18 Javascript
vue循环中点击选中再点击取消(单选)的实现
Sep 10 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程序时遇到的三个问题
2012/01/17 PHP
php错误级别的设置方法
2013/06/17 PHP
php加密解密函数authcode的用法详细解析
2013/10/28 PHP
一键生成各种尺寸Icon的php脚本(实例)
2017/02/08 PHP
Javascript Tab 导航插件 (23个)
2009/06/11 Javascript
JQuery 浮动导航栏实现代码
2009/08/27 Javascript
JavaScript和ActionScript的交互实现代码
2010/08/01 Javascript
javascript语言结构小记(一)
2011/09/10 Javascript
JQuery获取各种宽度、高度(format函数)实例
2013/03/04 Javascript
JavaScript 函数惰性载入的实现及其优点介绍
2013/08/12 Javascript
jquery中prop()方法和attr()方法的区别浅析
2013/09/06 Javascript
让浏览器DOM元素最后加载的js方法
2014/07/29 Javascript
JavaScript使用setInterval()函数实现简单轮询操作的方法
2015/02/02 Javascript
JavaScript实现Flash炫光波动特效
2015/05/14 Javascript
网页从弹窗页面单选框传值至父页面代码分享
2015/09/29 Javascript
JavaScript中数组的合并以及排序实现示例
2015/10/24 Javascript
javascript计时器编写过程与实现方法
2016/02/29 Javascript
如何制作幻灯片(代码分享)
2017/01/06 Javascript
纯JS实现简单的日历
2017/06/26 Javascript
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
2017/09/11 Javascript
Js利用prototype自定义数组方法示例
2017/10/20 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
jQuery实现的电子时钟效果完整示例
2018/04/28 jQuery
Three.JS实现三维场景
2018/12/30 Javascript
微信小程序登录态和检验注册过没的app.js写法
2019/05/22 Javascript
[01:18:36]LGD vs VP Supermajor 败者组决赛 BO3 第一场 6.10
2018/07/04 DOTA
python实现随机调用一个浏览器打开网页
2018/04/21 Python
Tensorflow 训练自己的数据集将数据直接导入到内存
2018/06/19 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
2018/12/19 Python
Python实现正则表达式匹配任意的邮箱方法
2018/12/20 Python
python输出数组中指定元素的所有索引示例
2019/12/06 Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
2020/11/20 Python
香港零食网购:上仓胃子
2020/06/08 全球购物
建筑个人求职信范文
2014/01/25 职场文书
给朋友的道歉短信
2015/05/12 职场文书
国庆节到了,利用JS实现一个生成国庆风头像的小工具 详解实现过程
2021/10/05 Javascript