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

vue使用input封裝上傳文件圖片全局組件的示例代碼

 更新時(shí)間:2023年11月24日 11:11:53   作者:-風(fēng)過無痕  
實(shí)際開發(fā)過程中,我們經(jīng)常遇見需要上傳文件圖片功能,可以封裝一個(gè)全局組件來調(diào)用,這篇文章給大家介紹vue使用input封裝上傳文件圖片全局組件,感興趣的朋友跟隨小編一起看看吧

前言

  • 實(shí)際開發(fā)過程中,我們經(jīng)常遇見需要上傳文件圖片功能,可以封裝一個(gè)全局組件來調(diào)用
  • 原理很簡(jiǎn)單,首先獲取到文件或圖片對(duì)象,調(diào)用自己公司文檔服務(wù)器的接口,上傳文件圖片
  • 為了方便用戶體驗(yàn),我們應(yīng)該在上傳之前開啟遮罩層,上傳成功之后關(guān)閉遮罩層。
  • 我們還可以根據(jù)實(shí)際開發(fā)場(chǎng)景自定義把url和文件名稱傳回父組件

代碼實(shí)現(xiàn)

1.定義api

export function uploadvideo (data) {
  return request({
    url: '/upload/video',
    method: 'post',
    headers: { 'Content-Type': 'multipart/form-data' },
    data
  })
}

2.在src/components/建立DocUpload文件夾/index.vue-代碼如下

<template>
  <el-dialog
    title="上傳"
    :visible.sync="dialogVisible"
    width="40%"
    :before-close="handleClose"
  >
    <el-form ref="form" :model="form" size="small" label-width="80px">
      <el-form-item label="文件名稱:">
        <el-input v-model="form.contitle" disabled></el-input>
      </el-form-item>
      <el-form-item label="文件上傳:">
        <div class="uppicture">
          <input type="file" class="upinput" ref="file" @change="showimg" />
          <i class="el-icon-plus" id="changes" @click="changeimg"></i>
          <p>上傳合同文件附件</p>
        </div>
        <el-button type="primary" class="uploadbutton" @click="addupload"
          >上傳附件</el-button
        >
      </el-form-item>
    </el-form>
?
    <span slot="footer" class="dialog-footer">
      <el-button @click="handleClose" style="background: #f7f7f7" size="small"
        >取 消</el-button
      >
      <!-- <el-button type="primary" @click="upload">確 定</el-button> -->
    </span>
  </el-dialog>
</template>
?
<script>
import { uploadvideo } from '@/api/entering'
// 遮罩層
import { Loading } from 'element-ui'
export default {
  name: 'DocUpload',
  data () {
    return {
      form: {
        // 合同名稱
        contitle: ''
      },
      formdata: {}
    }
  },
  props: {
    // 顯示隱藏
    dialogVisible: {
      type: Boolean,
      //   必傳
      required: true
    }
  },
  methods: {
    // 關(guān)閉之前
    handleClose () {
      console.log('關(guān)閉之前')
      // .sync語法糖,單向數(shù)據(jù)流問題,
      // 父組件傳遞給子組件的數(shù)據(jù),子組件直接修改會(huì)報(bào)錯(cuò),需要傳遞給父組件修改
      this.$emit('update:dialogVisible', false)
    },
    // 輸入款獲取事件
    showimg () {
      const that = this
      console.log(that.$refs.file)
      console.log(that.$refs.file.files[0])
      // 文件名稱復(fù)制
      that.form.contitle = that.$refs.file.files[0].name
      // 聲明一個(gè)formdata對(duì)象
      this.formdata = new FormData()
      // 賦值需要傳遞的文件
      this.formdata.append('multipartFile', that.$refs.file.files[0])
    },
    // 圖標(biāo)觸發(fā)輸入框事件
    changeimg () {
      // 點(diǎn)擊圖標(biāo)時(shí)候,觸發(fā)input選擇文件按鈕
      this.$refs.file.dispatchEvent(new MouseEvent('click'))
    },
    // 上傳附件
    async addupload () {
      // 上傳文文件提示,未選擇文件提示用戶
      if (!this.form.contitle) {
        return this.$message.warning('請(qǐng)先在左側(cè)上傳文件')
      }
      //開啟遮罩層
      let loadingInstance = Loading.service({
        lock: true, //lock的修改符--默認(rèn)是false
        text: '正在上傳文件,請(qǐng)耐心等待', //顯示在加載圖標(biāo)下方的加載文案
        spinner: 'el-icon-loading', //自定義加載圖標(biāo)類名
        background: 'rgba(0, 0, 0, 0.7)', //遮罩層顏色
        target: document.querySelector('#futureTransferDialog') //loadin覆蓋的dom元素節(jié)點(diǎn)
      })
      const res = await uploadvideo(this.formdata)
      console.log('文檔服務(wù)器上傳文件', res)
      // 傳遞文件存儲(chǔ)id
      this.$emit('updataurl', res.data.url)
      // 回顯文件名稱給父組件的form表單
      this.$emit('updata', this.form.contitle)
      //  清空表單
      this.form.contitle = ''
      this.formdata = {}
      // 關(guān)閉彈框
      this.handleClose()
      //關(guān)閉遮罩層
      loadingInstance.close()
    }
  }
}
</script>
?
<style lang="scss" scoped>
::v-deep .el-dialog {
  border-radius: 10px;
  .el-dialog__header {
    border-radius: 9px 9px 0 0;
    background-color: #1488c6;
    padding: 8px 20px;
    .el-dialog__title {
      color: white;
      font-size: 16px;
    }
?
    .el-dialog__headerbtn {
      top: 12px;
      i {
        color: white;
      }
    }
  }
  .el-dialog__footer {
    text-align: center;
  }
  .el-dialog__body {
    padding: 12px;
  }
  .uppicture {
    width: 120px;
    height: 120px;
    border: 1px solid #717376;
    position: relative;
    cursor: pointer;
    input {
      width: 100%;
      height: 100%;
      vertical-align: middle;
      opacity: 0;
    }
    i {
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      font-size: 30px;
      // background-color: skyblue;
    }
    p {
      position: absolute;
      bottom: -2px;
      left: 50%;
      word-break: keep-all;
      transform: translate(-50%);
    }
    .uploadbutton {
      position: absolute;
      bottom: 0;
      margin-left: 20px;
      position: relative;
    }
    &:hover {
      color: #2da9fa;
      border: 1px solid #2da9fa;
      p {
        color: #2da9fa;
      }
    }
  }
  .uploadbutton {
    position: absolute;
    top: 70%;
    left: 150px;
  }
}
</style>

3.全局組件注冊(cè)-省略

4.父組件使用

4.1組件使用

<DocUpload
      :dialogVisible.sync="dialogannex"
      //  form是父組件表單,上傳成功之后,直接通過子傳父,把url和文件名稱傳遞到父組件表單
      @updata="form.name = $event"
      @updataurl="form.ontractAttachment = $event"
    ></DocUpload>

4.2父組件data

 // 上傳組件開關(guān)
 dialogannex: false,
 // 表單
 form: {},

4.3打開組件-methods

addupload () {
      this.dialogannex = true
},

總結(jié):

經(jīng)過這一趟流程下來相信你也對(duì) vue-使用input封裝上傳文件圖片全局組件 有了初步的深刻印象,但在實(shí)際開發(fā)中我 們遇到的情況肯定是不一樣的,所以我們要理解它的原理,萬變不離其宗。

到此這篇關(guān)于vue使用input封裝上傳文件圖片全局組件的文章就介紹到這了,更多相關(guān)vue封裝上下文件圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在vue中使用echarts圖表實(shí)例代碼詳解

    在vue中使用echarts圖表實(shí)例代碼詳解

    本文通過實(shí)例代碼給大家介紹了在vue中使用echarts圖表的方法,需要注意的事項(xiàng)文中給大家提到,需要的朋友可以參考下
    2018-10-10
  • vue跳轉(zhuǎn)頁(yè)面的幾種常用方法代碼示例

    vue跳轉(zhuǎn)頁(yè)面的幾種常用方法代碼示例

    這篇文章主要給大家介紹了關(guān)于vue跳轉(zhuǎn)頁(yè)面的幾種常用方法,vue跳轉(zhuǎn)頁(yè)面有好幾種不同方法,文中通過代碼將實(shí)現(xiàn)的方法介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-10-10
  • vue使用AES.js的步驟詳解

    vue使用AES.js的步驟詳解

    AES對(duì)數(shù)據(jù)傳輸加密、解密處理---AES.js,下面分步驟給大家介紹vue使用AES.js的示例代碼,感興趣的朋友跟隨小編一起看看吧
    2021-10-10
  • vue中axios的二次封裝實(shí)例講解

    vue中axios的二次封裝實(shí)例講解

    在本篇文章里小編給大家整理了關(guān)于vue中axios的二次封裝實(shí)例以及相關(guān)知識(shí)點(diǎn)總結(jié),需要的朋友們可以學(xué)習(xí)下。
    2019-10-10
  • Vue實(shí)現(xiàn)調(diào)用PC端攝像頭實(shí)時(shí)拍照

    Vue實(shí)現(xiàn)調(diào)用PC端攝像頭實(shí)時(shí)拍照

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)調(diào)用PC端攝像頭實(shí)時(shí)拍照,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 使用Vue3實(shí)現(xiàn)交互式雷達(dá)圖的代碼實(shí)現(xiàn)

    使用Vue3實(shí)現(xiàn)交互式雷達(dá)圖的代碼實(shí)現(xiàn)

    雷達(dá)圖是一種可視化數(shù)據(jù)的方式,用于比較多個(gè)類別中不同指標(biāo)的相對(duì)值,它適用于需要展示多個(gè)指標(biāo)之間的關(guān)系和差異的場(chǎng)景,本文給大家介紹了如何用Vue3輕松創(chuàng)建交互式雷達(dá)圖,需要的朋友可以參考下
    2024-06-06
  • Vue組件的使用及個(gè)人理解與介紹

    Vue組件的使用及個(gè)人理解與介紹

    本文介紹了VUE中組件的基本使用以及個(gè)人對(duì)VUE組件的理解,希望能幫助到大家
    2019-02-02
  • Vuex實(shí)現(xiàn)簡(jiǎn)單購(gòu)物車

    Vuex實(shí)現(xiàn)簡(jiǎn)單購(gòu)物車

    這篇文章主要為大家詳細(xì)介紹了Vuex實(shí)現(xiàn)簡(jiǎn)單購(gòu)物車,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • vue2中組件互相調(diào)用實(shí)例methods中的方法實(shí)現(xiàn)詳解

    vue2中組件互相調(diào)用實(shí)例methods中的方法實(shí)現(xiàn)詳解

    vue在同一個(gè)組件內(nèi),方法之間經(jīng)常需要互相調(diào)用,下面這篇文章主要給大家介紹了關(guān)于vue2中組件互相調(diào)用實(shí)例methods中的方法實(shí)現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • vue實(shí)現(xiàn)循環(huán)滾動(dòng)圖片

    vue實(shí)現(xiàn)循環(huán)滾動(dòng)圖片

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)循環(huán)滾動(dòng)圖片,多圖片輪播,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07

最新評(píng)論

台东县| 长兴县| 绥宁县| 滁州市| 新宁县| 广宗县| 达尔| 嘉兴市| 陵水| 四川省| 通州市| 承德市| 页游| 华阴市| 海盐县| 上思县| 柘荣县| 沁水县| 新野县| 抚松县| 海盐县| 涿鹿县| 岢岚县| 宽城| 拉萨市| 常山县| 格尔木市| 榆树市| 湾仔区| 巧家县| 兴山县| 新乡市| 阜平县| 建湖县| 兰州市| 闸北区| 桐城市| 泰安市| 昔阳县| 泸水县| 怀远县|