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

 更新时间:2019年04月25日 11:32:02   作者:guanguan0_0   我要评论

这篇文章主要介绍了Vue开发之封装上传文件组件与用法,结合实例形式分析了vue.js使用elementui的 el-upload插件进行上传文件组件的封装及使用相关操作技巧,需要的朋友可以参考下

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

使用elementui的 el-upload插件实现?#35745;?#19978;传组件

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

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: []
    }, // 父组件传递的?#35745;?#21015;表
    limit: "" // ?#35745;?#25968;量限制
  },
  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: {
    // ?#35745;?#31227;除时处理数据
    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;
    },
    // 判断?#35745;?#25968;量
    handleExceed(files, fileList) {
      this.$message.warning(`当前限制选择 ${this.limit} 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
    },
    beforeRemove(file, fileList) {},
    // 上传?#35745;?#25104;功事件
    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>

使用上传?#35745;?#32452;件:

<pictureupload @uploadimg="uploadimg" :imgList="ruleForm.img" :limit="3" @removeimg="removeimg"></pictureupload>

removeimg(item) {
  this.ruleForm.img = item;
},
uploadimg(item) {
  this.ruleForm.img.push(item);
},

希望本文所述?#28304;?#23478;vue.js程序设计有所帮助。

相关文章

  • Vue项目数据动态过滤实践及实现思路

    Vue项目数据动态过滤实践及实现思路

    这篇文章主要介绍了Vue项目数据动态过滤实践,,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • Vue.js中对css的操作(修改)具体方式详解

    Vue.js中对css的操作(修改)具体方式详解

    使用v-bind:class或者v-bind:style或者直接通过操作dom来对其样式进行更改;接下来通过本文给大家分享Vue.js中对css的操作(修改)具体方式,?#34892;?#36259;的朋友跟随小编一起看看吧
    2018-10-10
  • 关于vue状态过渡transition不起作用的原因解决

    关于vue状态过渡transition不起作用的原因解决

    这篇文章主要介绍了关于vue状态过渡transition不起作用的原因解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • 详解vue父子组件间传值(props)

    详解vue父子组件间传值(props)

    本篇文章主要介绍了详解vue父子组件间传值(props),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • vue微信分享出来的链接点开是首页问题的解决方法

    vue微信分享出来的链接点开是首页问题的解决方法

    这篇文章主要为大家详细介绍了vue微信分享出来的链接点开是首页问题的解决方法,具有一定的参?#25216;?#20540;,?#34892;?#36259;的小伙伴们可以参?#23478;?#19979;
    2018-11-11
  • vue-star评星组件开发实例

    vue-star评星组件开发实例

    下面小编就为大家分享一篇vue-star评星组件开发实例,具有很好的参?#25216;?#20540;,希望?#28304;?#23478;有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • vue通过点击事件读取音频文件的方法

    vue通过点击事件读取音频文件的方法

    最近做项目遇到这样的一个需求,通过select元素来选择音频文件的名称,点击按钮可以进行试听。接下来通过本文给大家介绍vue项目中通过点击事件读取音频文件的方法,需要的朋友可以参考下
    2018-05-05
  • 对vux点击事件的优化详解

    对vux点击事件的优化详解

    今天小编就为大家分享一篇对vux点击事件的优化详解,具有很好的参?#25216;?#20540;,希望?#28304;?#23478;有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • vue使用laydate时间插件的方法

    vue使用laydate时间插件的方法

    这篇文章主要为大家详细介绍了vue使用laydate时间插件的方法,具有一定的参?#25216;?#20540;,?#34892;?#36259;的小伙伴们可以参?#23478;?#19979;
    2018-11-11
  • 使用淘宝镜像cnpm安装Vue.js的图文教程

    使用淘宝镜像cnpm安装Vue.js的图文教程

    今天小编就为大家分享一篇使用淘宝镜像cnpm安装Vue.js的图文教程,具有很好的参?#25216;?#20540;,希望?#28304;?#23478;有所帮助。一起跟随小编过来看看吧
    2018-05-05

最新评论

时时彩包赢公式0369