我是靠谱客的博主 健壮芹菜,最近开发中收集的这篇文章主要介绍封装vue上传图片公共组件(即拿即用)封装vue上传图片公共组件(即拿即用),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

封装vue上传图片公共组件(即拿即用)

子组件:

<template>
  <div class="up_img">
    <div class="up_img_button pr">
      <img class="bd-o u_i_b_img" src="../../assets/img/jzz/xiangjiupimg.png" height="25" width="30"/>
      <input type="file" id="img" class="upload jbank" @change="addImg" ref="inputer" accept="image/png,image/jpeg,image/gif,image/jpg"/>
      <p class="u_i_b_title">照片上传</p>
    </div>
    <div v-for='(value, key,index) in imgs' class="imgList">
      <p class="img pr">
        <img :src="getObjectURL(value)" style="width: 100%">
        <a class="close" @click="delImg(key,index)">×</a>
      </p>
    </div>
  </div>
</template>

<script>
  export default {
    name: "UpImg",
    data(){
      return{
        formData:new FormData(), // 图片对象,七牛云需要使用这种方式
        imgs: {},
        imgLen:0,
        senddataimg:[],
      }
    },
    methods:{
      addImg(event){
        let up = $('.jbank')[0]; //获取到input的节点
        let inputDOM = this.$refs.inputer;
        // 通过DOM取文件数据
        this.fil = inputDOM.files;
        let oldLen=this.imgLen;
        let len=this.fil.length+oldLen;
        if(len>4){
          alert('最多可上传4张,您还可以上传'+(4-oldLen)+'张');
          return false;
        }
        for (let i=0; i < this.fil.length; i++) {
          let size = Math.floor(this.fil[i].size / 1024);
          if (size > 10*1024*1024) {
            alert('请选择10M以内的图片!');
            return false
          }
          this.imgLen++;

          this.$getImgUrl.getimg(up.files[0], res=>{
            console.log(res)
            let arr = [res];
            this.senddataimg.push(...arr);
          });
          this.$emit("senddataimg",this.senddataimg)
          this.$set(this.imgs,this.fil[i].name+'?'+new Date().getTime()+i,this.fil[i]);
          console.log(this.imgs)
        }
      },
      getObjectURL(file) {
        var url = null ;
        if (window.createObjectURL!=undefined) { // basic
          url = window.createObjectURL(file) ;
        } else if (window.URL!=undefined) { // mozilla(firefox)
          url = window.URL.createObjectURL(file) ;
        } else if (window.webkitURL!=undefined) { // webkit or chrome
          url = window.webkitURL.createObjectURL(file) ;
        }
        return url ;
      },
      delImg(key,index){
        this.$delete(this.imgs,key);
        this.senddataimg.splice(this.senddataimg.indexOf(key))
        this.$emit("senddataimg",this.senddataimg)
        this.imgLen--;
      },
    }
    }

</script>

<style scoped lang="stylus" type="text/stylus">
  .up_img
    display flex
    flex-wrap wrap
    justify-content left
    .up_img_button
      margin-right .1rem
      background: #F5F5F5
      overflow: hidden
      width 30%
      max-width: 1.1rem
      height: 1.1rem
      .u_i_b_img
        margin auto
        margin-top .3rem
        margin-bottom .1rem
      .u_i_b_title
        text-align: center
        color: #999999
        font-size: .13rem
      .upload
        opacity 0
        position: absolute;
        top: 0;
        left: 0;
        width: 1.1rem;
        height: 1.1rem;
    .imgList
      margin-right .1rem
      width 30%
      max-width: 1.1rem
      height: 1.1rem
      .img
        .close
          top 0
          right 0
          position absolute
</style>

代码中调用的this.$getImgUrl.getimg()是我自己封装的上传七牛云的js,这里换成你自己的就好了;传自己的服务器或者第三方看你们公司用啥。

父组件:

<template>
  <div class="complaint">
        <UpImg @senddataimg="senddataimg"></UpImg>
  </div>
</template>

<script>
  import UpImg from '../public/UpImg'
  export default {
    name: "Complaint",
    data(){
      return {
        listenChildImg:''
      }
    },
    mounted(){
    },
    methods:{
      sendMassage(){
        this.verified();
        let ok = 1;
        console.log(this.issuccess)
        this.issuccess.forEach((item,index)=>{
          if(!item){
            ok++;
          }
          console.log(item,ok)
        });
        if(this.listenChildImg){
          let arr = [];
          let i = 0;
          this.listenChildImg.forEach((item, index)=>{
            if(item !== false){
              arr[i] = item;
              i++;
            }
          });
          this.listenChildImg = arr
        }
        if(this.listenChildImg.length>4 || this.listenChildImg.length<1){
          this.$timealert.timealert();
          this.alertContent = "请上传图片,最少上传1张,如有多余请删除(上传图片需要一点时间,请耐心等待)"
        }
    	// 给服务器发数据的就不给你了,自己写去
      },
      senddataimg(senddataimg){
        this.listenChildImg = senddataimg
        console.log(this.listenChildImg);
      }
    },
    components: {
      UpImg
    }
  }
</script>

<style scoped lang="stylus" type="text/stylus">
  // 样式自己写去
</style>

代码如果出现问题,自己调试一下,我删除隐私信息可能没删对,此代码在项目中可以正常运行。

最后

以上就是健壮芹菜为你收集整理的封装vue上传图片公共组件(即拿即用)封装vue上传图片公共组件(即拿即用)的全部内容,希望文章能够帮你解决封装vue上传图片公共组件(即拿即用)封装vue上传图片公共组件(即拿即用)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部