最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue 使用原生組件上傳圖片的實例

 更新時間:2020年09月08日 15:19:29   作者:HenrikWen  
這篇文章主要介紹了vue 使用原生組件上傳圖片的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

需求描述:需要將后臺返回的圖片路徑賦值到img的 src

1 一個頁面上傳一張圖片

當一個頁面只有一個位置需要上傳圖片,很簡單,直接綁定上傳按鈕

html頁面

 <div class="col-md-4">
  <input class="hidden" accept="image/png,image/jpg" type="file" id="tempUploadFile" v-on:change="uploadPic($event)" />
  <input class="hidden" v-model="mapItem.MapIcon" />
  <img class="imgbgbox" v-bind:src="mapItem.MapIcon" />
 </div>

js代碼:封裝上傳圖片的方法

 uploadPic(e) {
  var _self = this;
  var inputFile = e.target;
  if (!inputFile.files || inputFile.files.length <= 0) {
   return;
  }
  var file = inputFile.files[0];
  var formData = new FormData();
  formData.append('file', file);
  formData.append('SaveDir', 'Map/MapItem');
  formData.append("FileName", $.whiskey.tools.dateFormat(new Date(), "HHmmssffff"));
  $.ajax({
   url: "/Upload/UploadPic",//后臺上傳圖片的方法
   type: 'POST',
   dateType: 'json',
   cache: false,
   data: formData,
   processData: false,
   contentType: false,
   success: function (res) {
    if (res.ResultType == 3) {
     var filePath = res.Data.file;//后臺返回的圖片路徑
     _self.mapItem.MapIcon = filePath;//將路徑賦值到聲明的變量中
    }
   }
  });
},

2 一個頁面上傳多張圖片

當一個頁面有多個位置需要上傳圖片,如果按照上面方法,得需要綁定多個上傳函數(shù),所以我把重復的部分封裝出來,用到了promise函數(shù)

html頁面

 <div class="col-md-4">
  <input class="hidden" accept="image/png,image/jpg" type="file" id="tempUploadFile" v-on:change="uploadPic($event)" />
  <input class="hidden" v-model="mapItem.MapIcon" />
  <img class="imgbgbox" v-bind:src="mapItem.MapIcon" />
 </div>

js代碼:封裝上傳圖片的方法

 uploadPic(e) {
  var _self = this;
  var inputfile = e.target;
  _self.uploadImg(inputfile).then(data => {
   _self.mapItem.MapIcon = data;//data為取到的圖片路徑
  })
},
//封裝函數(shù)
 uploadImg(inputFile) {
  var _self = this;
  if (!inputFile.files || inputFile.files.length <= 0) {
   return;
  } 
  return new Promise((suc,err)=>{
   var file = inputFile.files[0];
   var filepath = "";
   var formData = new FormData();
   formData.append('file', file);
   formData.append('SaveDir', 'Map/MapSite');
   formData.append("FileName", $.whiskey.tools.dateFormat(new Date(), "HHmmssffff"));
   $.ajax({
    url: "/Upload/UploadPic",
    type: 'POST',
    dateType: 'json',
    cache: false,
    data: formData,
    processData: false,
    async:false,
    contentType: false,
    success: function (res) {
     if (res.ResultType == 3) {
      filepath = res.Data.file;
      suc(filepath);
     }
    }
   });
  })
 },
},

補充知識:vue 利用原生input上傳圖片并預覽并刪除

看代碼~

<template>
 <div class="com-upload-img">
 <div class="img_group">
  <div v-if="allowAddImg" class="img_box">
  <input type="file" accept="image/*" multiple="multiple" @change="changeImg($event)">
  <div class="filter" />
  </div>
  <div v-for="(item,index) in imgArr" :key="index" class="img_box">
  <div class="img_show_box">
   <img :src="item" alt="">
   <i class="img_delete" @click="deleteImg(index)" />
   <!-- <i class="img_delete" @click="imgArr.splice(index,1)"></i> -->
  </div>
  </div>
 </div>
 </div>
</template>

js部分

<script>
export default {
 name: 'ComUpLoad',
 data() {
 return {
  imgData: '',
  imgArr: [],
  imgSrc: '',
  allowAddImg: true
 }
 },
 methods: {
 changeImg: function(e) {
  var _this = this
  var imgLimit = 1024
  var files = e.target.files
  var image = new Image()
  if (files.length > 0) {
  var dd = 0
  var timer = setInterval(function() {
   if (files.item(dd).type !== 'image/png' && files.item(dd).type !== 'image/jpeg' && files.item(dd).type !== 'image/gif') {
   return false
   }
   if (files.item(dd).size > imgLimit * 102400) {
   // to do sth
   } else {
   image.src = window.URL.createObjectURL(files.item(dd))
   image.onload = function() {
    // 默認按比例壓縮
    var w = image.width
    var h = image.height
    var scale = w / h
    w = 200
    h = w / scale
    // 默認圖片質(zhì)量為0.7,quality值越小,所繪制出的圖像越模糊
    var quality = 0.7
    // 生成canvas
    var canvas = document.createElement('canvas')
    var ctx = canvas.getContext('2d')
    // 創(chuàng)建屬性節(jié)點
    var anw = document.createAttribute('width')
    anw.nodeValue = w
    var anh = document.createAttribute('height')
    anh.nodeValue = h
    canvas.setAttributeNode(anw)
    canvas.setAttributeNode(anh)
    ctx.drawImage(image, 0, 0, w, h)
    var ext = image.src.substring(image.src.lastIndexOf('.') + 1).toLowerCase()// 圖片格式
    var base64 = canvas.toDataURL('image/' + ext, quality)
    // 回調(diào)函數(shù)返回base64的值
    if (_this.imgArr.length <= 4) {
    _this.imgArr.unshift('')
    _this.imgArr.splice(0, 1, base64)// 替換數(shù)組數(shù)據(jù)的方法,此處不能使用:this.imgArr[index] = url;
    if (_this.imgArr.length >= 5) {
     _this.allowAddImg = false
    }
    }
   }
   }
   if (dd < files.length - 1) {
   dd++
   } else {
   clearInterval(timer)
   }
  }, 1000)
  }
 },
 deleteImg: function(index) {
  this.imgArr.splice(index, 1)
  if (this.imgArr.length < 5) {
  this.allowAddImg = true
  }
 }
 }
}
</script>

以上這篇vue 使用原生組件上傳圖片的實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue3遞歸組件封裝的全過程記錄

    vue3遞歸組件封裝的全過程記錄

    組件是可以在自己的模板中調(diào)用自身的,不過他們只能通過name選項來做這件事,下面這篇文章主要給大家介紹了關(guān)于vue3遞歸組件封裝的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • vue中el-tab如何點擊不同標簽觸發(fā)不同函數(shù)的實現(xiàn)

    vue中el-tab如何點擊不同標簽觸發(fā)不同函數(shù)的實現(xiàn)

    el-tab本身的功能是點擊之后切換不同頁,本文主要介紹了vue中el-tab如何點擊不同標簽觸發(fā)不同函數(shù)的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • vue實現(xiàn)超過兩行顯示展開收起的代碼

    vue實現(xiàn)超過兩行顯示展開收起的代碼

    這篇文章主要介紹了vue實現(xiàn)超過兩行顯示展開收起的代碼,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 監(jiān)聽element-ui table滾動事件的方法

    監(jiān)聽element-ui table滾動事件的方法

    這篇文章主要介紹了監(jiān)聽element-ui table滾動事件的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • vue3.x中emits的基本用法實例

    vue3.x中emits的基本用法實例

    emits是Vue3新增的選項,emits主要作用在子組件中,用于接收在父組件中綁定的方法,這篇文章主要給大家介紹了關(guān)于vue3.x中emits的基本用法,需要的朋友可以參考下
    2022-07-07
  • 在VUE style中使用data中的變量的方法

    在VUE style中使用data中的變量的方法

    這篇文章主要介紹了在VUE style中使用data中的變量的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • Vue實現(xiàn)時間軸效果

    Vue實現(xiàn)時間軸效果

    這篇文章主要為大家詳細介紹了Vue實現(xiàn)時間軸效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • antd upload上傳組件如何獲取服務端返回數(shù)據(jù)

    antd upload上傳組件如何獲取服務端返回數(shù)據(jù)

    這篇文章主要介紹了antd upload上傳組件如何獲取服務端返回數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 使用idea創(chuàng)建vue項目的圖文教程

    使用idea創(chuàng)建vue項目的圖文教程

    Vue.js是一套構(gòu)建用戶界面的框架,只關(guān)注視圖層,它不僅易于上手,還便于與第三方庫或既有項目整合,下面這篇文章主要給大家介紹了關(guān)于使用idea創(chuàng)建vue項目的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • vue組件文檔生成備注詳解

    vue組件文檔生成備注詳解

    這篇文章主要介紹了vue組件文檔生成備注詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04

最新評論

兴安盟| 中西区| 江川县| 鄄城县| 武威市| 徐汇区| 二连浩特市| 永新县| 泰宁县| 龙胜| 松原市| 凉城县| 大港区| 诏安县| 深泽县| 阆中市| 上饶县| 轮台县| 禹州市| 溧水县| 和硕县| 龙岩市| 南投市| 宁远县| 潜山县| 蓬安县| 三河市| 巨野县| 府谷县| 保德县| 邵武市| 广东省| 葫芦岛市| 新营市| 丰镇市| 宝应县| 资源县| 旺苍县| 云南省| 五原县| 兴隆县|