基于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(‘提交成功’);
                             }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>
时间: 2024-11-02 13:16:44

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

基于Vue的SPA动态修改页面title的方法

最近基于VUE做个SPA手机端web发现动态修改页面标题通过document.title=xxxx 来修改着实蛋疼,而且在IOS的微信端据说没效果.百度发现要针对IOS的微信做点额外的操作,即:创建一个隐藏的Iframe,然后随便加载一个图片文件,然后加载完成移除,这样就能修改页面title了.网上有几种方案: 1,App.Vue里面设置title属性,然后页面title去绑定,所有子组件修改标题就通过 this.$root.data.title=xxxxx;去修改 缺点:App.Vue默认的e

基于Vue的SPA如何优化页面加载速度

常见的几种SPA优化方式 减小入口文件体积 静态资源本地缓存 开启GZip压缩 使用SSR ..... 减小入口文件体积,常用的手段是路由懒加载,开启路由懒加载之后,待请求的页面会单独打包js文件,使得入口文件index.js变小,开启懒加载之后,js是这样请求加载的: 2. 静态文件本地缓存有两种方式 HTTP缓存,设置Cache-Control,Last-Modified,Etag等响应头,很多文章讲的比较详细,推荐:https://www.cnblogs.com/chinajava/p/5

【Vue中的坑】vue项目中动态绑定src不显示图片解决方法

v-for绑定src的数据如下: data() { return { img_src:"../../assets/images/mirror-service.png" } } 渲染之后,发现图片不显示,上网查找之后发现是应为图片链接是需要通过 require包裹的 data() { return { img_src:require("../../assets/images/mirror-service.png)" } } 然后就会发现好使了 原文地址:https:/

spring mvc页面显示图片失败

在配置文件中需要映射静态资源 <!-- 当在web.xml 中 DispatcherServlet使用 <url-pattern>/</url-pattern> 映射时,能映射静态资源 --><mvc:default-servlet-handler/><!-- 静态资源映射,配置了<mvc:annotation-driven /> 才会起作用--><mvc:resources mapping="/html/**&quo

blob数据输出到页面显示图片

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request

基于Vue公众号开发中的哪些坑 (严重鄙视ios,遇到的坑基本都是在ios中)

一.ios白屏问题ios端基于vue开发的H5无法正常显示,白屏问题1.代码问题确定方法:在ie/edge浏览器中打开,看是否正常显示,如果仍然白屏,可以确定问题解决方法:1.代码中是否使用es6,如果使用,确定使用es6转es5,(npm install babel-polyfillnpm install es6-promise)2.参考 https://www.cnblogs.com/love314159/articles/9355785.html3.以上方法都不行的话,查看源码是在main

页面显示头像(图片)

jsp <%-- <c:choose> --%> <%-- <c:when test="${not empty oaUserinfo.headpicturename || not empty oaUserinfo.picturename}"> --%> <img alt="头像" style="float: left; border-radius:10px;" src='${contextPa

解决Vue 使用vue-router切换页面时 页面显示没有在顶部的问题

有时候我们需要页面滚动条滚动到某一固定的位置,一般使用Window scrollTo() 方法. 语法就是:scrollTo(xpos,ypos) xpos:必需.要在窗口文档显示区左上角显示的文档的 x 坐标. ypos:必需.要在窗口文档显示区左上角显示的文档的 y 坐标. 例如滚动内容的坐标位置100,500: window.scrollTo(100,500); 解决办法: 在 Vue项目的main.js文件中加入以下代码即可解决: router.afterEach((to,from,ne

前端基于VUE的v-charts的曲线显示

目录 前端基于VUE的v-charts的曲线显示 1. 应用背景 2. 分析数据生产者生成 3. 取出数据消费者 4. 前端显示 4.1 安装V-charts插件 4.2 引入veline曲线插件 4.3 曲线标签 ve-line 4.3.1 方法一:直接使用html标签 4.3.2 方法二:pug编译 4.4 前端写入调试模拟数据 4.5 注册组件 5 总体效果 6后端基于Net Core的电能定时计算 前端基于VUE的v-charts的曲线显示 1. 应用背景 在做一个某路灯管理处的物联网项