基于VUE选择上传图片并在页面显示(图片可删除)

Posted 嘉爷

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于VUE选择上传图片并在页面显示(图片可删除)相关的知识,希望对你有一定的参考价值。

demo例子:

 

依赖文件 :

 

http://files.cnblogs.com/files/zhengweijie/jquery.form.rar

 

 

 

HTML文本内容:

 

 

<template>
  <div id="accident">
      <div class="wrapper">
        <i class="icon-pic"></i>相关照片
        <button type="button" @click="change_input()">上传照片</button>
        <form id="addTextForm" @change="setImg($event)">
        </form>
      </div>
      <div id="img-wrapper" @click="deleteImg($event)"></div>
      <P class="btn-wrapper">
          <mt-button type="primary" @click="submit()">提交</mt-button>
      </P>
  </div>
</template>

 


JS文本内容:

<script>
    /** 
    * 从 file 域获取 本地图片 url 
    */ 
    function getFileUrl(obj) { 
      let url; 
      url = window.URL.createObjectURL(obj.files.item(0)); 
      return url; 
    }

export default {
  name: \'accident\',
  // 定义数据
  data () {
    return {
      imgNum:4,    //上传的照片数量,可根据实际情况自定义        
    }
  },//定义事件
   methods:{
      //根据点击上传按钮触发input
      change_input(){
        let inputArr=$(\'#addTextForm input\');
        let add_inputId=\'\';     //需要被触发的input
        for(let i=0;i<inputArr.length;i++){
            // 根据input的value值判断是否已经选择文件
          if(!inputArr[i].value){          //如果没有选择,获得这个input的ID      
             add_inputId=inputArr[i].id;
             break;
          }
        }
        if(add_inputId){                   //如果需要被触发的input ID存在,将对应的input触发
          return  $("#"+add_inputId).click();
        }else{
          alert("最多选择"+this.imgNum+"张图片")
        }
      },
      //当input选择了图片的时候触发,将获得的src赋值到相对应的img
      setImg(e){
        let target=e.target;
        $(\'#img_\'+target.id).attr(\'src\',getFileUrl(e.srcElement));
      },
      //点击图片删除该图片并清除相对的input
      deleteImg(e){
        let target=e.target;
        let inputID=\'\';       //需要清除value的input
        if(target.nodeName==\'IMG\'){
          target.src=\'\';
          inputID=target.id.replace(\'img_\',\'\');    //获得需要清除value的input
          $(\'input#\'+inputID).val("");
        }
      },
      //提交信息到后台
      submit(){
            $("#addTextForm").ajaxSubmit({
                       url: this.$root.api+"/Index/staff_accident/add",      
                       type: "post",
                       data: {
                                \'total_price\':this.price,
                                \'descript\':this.descript,
                            },
                       success:  (data) => {
                            if(data.code==0){
                              console.log(‘提交成功’);
$("#addTextForm input").val(\'\');

                                 $(\'div#img-wrapper img\').attr(\'src\',\'\');

                           }else{
                                alert(\'提交失败\');
                             }
                        }
            });  
        }
   },
  //页面加载后执行
  mounted(){
    for(let i=0;i<this.imgNum;i++){
     //生成input框,默认为1
    let my_input = $(\'<input type="file" name="image" />\');   //创建一个input
    my_input.attr(\'id\',i);                           //为创建的input添加id
    $(\'#addTextForm\').append(my_input);                     //将生成的input追加到指定的form
    //生成img,默认为1
    let my_img = $(\'<img src="">\');
    my_img.attr(\'id\', \'img_\'+i);
    my_img.css({"max-width":"50%","max-height":"200px"});   //添加样式,由于vue的执行机制,页面加载的时候img标签还没有生成,直接写在style样式会不生效
    $(\'#img-wrapper\').append(my_img); 
    }
  },
}
</script>

 

以上是关于基于VUE选择上传图片并在页面显示(图片可删除)的主要内容,如果未能解决你的问题,请参考以下文章

formiframe实现异步上传文件

基于Vue + Node.js + MongoDB的图片上传组件,实现图片的预览和删除

快速创建VUE移动端上传图片功能

基于vue-cropper的上传裁剪后的头像

求js多张图片上传,可预览右上角带删除图标的代码

vue 图片上传