vue-使用input封裝上傳文件圖片全局組件

前言

  • 實際開發過程中,我們經常遇見需要上傳文件圖片功能,可以封裝一個全局組件來調用

  • 原理很簡單,首先獲取到文件或圖片對象,調用自己公司文檔服務器的接口,上傳文件圖片

  • 為了方便用戶體驗,我們應該在上傳之前開啟遮罩層,上傳成功之后關閉遮罩層。

  • 我們還可以根據實際開發場景自定義把url和文件名稱傳回父組件

代碼實現

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-dialogtitle="上傳":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: {// 關閉之前handleClose () {console.log('關閉之前')// .sync語法糖,單向數據流問題,// 父組件傳遞給子組件的數據,子組件直接修改會報錯,需要傳遞給父組件修改this.$emit('update:dialogVisible', false)},// 輸入款獲取事件showimg () {const that = thisconsole.log(that.$refs.file)console.log(that.$refs.file.files[0])// 文件名稱復制that.form.contitle = that.$refs.file.files[0].name// 聲明一個formdata對象this.formdata = new FormData()// 賦值需要傳遞的文件this.formdata.append('multipartFile', that.$refs.file.files[0])},// 圖標觸發輸入框事件changeimg () {// 點擊圖標時候,觸發input選擇文件按鈕this.$refs.file.dispatchEvent(new MouseEvent('click'))},// 上傳附件async addupload () {// 上傳文文件提示,未選擇文件提示用戶if (!this.form.contitle) {return this.$message.warning('請先在左側上傳文件')}//開啟遮罩層let loadingInstance = Loading.service({lock: true, //lock的修改符--默認是falsetext: '正在上傳文件,請耐心等待', //顯示在加載圖標下方的加載文案spinner: 'el-icon-loading', //自定義加載圖標類名background: 'rgba(0, 0, 0, 0.7)', //遮罩層顏色target: document.querySelector('#futureTransferDialog') //loadin覆蓋的dom元素節點})const res = await uploadvideo(this.formdata)console.log('文檔服務器上傳文件', res)// 傳遞文件存儲idthis.$emit('updataurl', res.data.url)// 回顯文件名稱給父組件的form表單this.$emit('updata', this.form.contitle)//  清空表單this.form.contitle = ''this.formdata = {}// 關閉彈框this.handleClose()//關閉遮罩層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.全局組件注冊-省略
4.父組件使用
4.1組件使用
<DocUpload:dialogVisible.sync="dialogannex"//  form是父組件表單,上傳成功之后,直接通過子傳父,把url和文件名稱傳遞到父組件表單@updata="form.name = $event"@updataurl="form.ontractAttachment = $event"></DocUpload>
4.2父組件data
 // 上傳組件開關dialogannex: false,// 表單form: {},
4.3打開組件-methods
addupload () {this.dialogannex = true
},

總結:

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

有什么不足的地方請大家指出謝謝 -- 風過無痕

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160253.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160253.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160253.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Godot

前言 為什么要研究開源引擎 主要原因有&#xff1a; 可以享受“信創”政策的紅利&#xff0c;非常有利于承接政府項目。中美脫鉤背景下&#xff0c;國家提出了“信創”政策。這個政策的核心就是&#xff0c;核心技術上自主可控。涉及的產業包括&#xff1a;芯片、操作系統、數據…

【Django使用】md文檔10大模塊第5期:Django數據庫增刪改查和Django視圖

Django的主要目的是簡便、快速的開發數據庫驅動的網站。它強調代碼復用&#xff0c;多個組件可以很方便的以"插件"形式服務于整個框架&#xff0c;Django有許多功能強大的第三方插件&#xff0c;你甚至可以很方便的開發出自己的工具包。這使得Django具有很強的可擴展…

Vue項目 配置項設置

一、項目運行時瀏覽器自動打開 找到package.json文件 找到"sctipts"配置項 在"serve"配置項最后加上--open "scripts": {"serve": "vue-cli-service serve --open","build": "vue-cli-service build&quo…

Redis面試內容,Redis過期策略,Redis持久化方式,緩存穿透、緩存擊穿和緩存雪崩,以及解決辦法

文章目錄 一、redis什么是RedisRedis使用場景1、緩存2、數據共享[分布式](https://so.csdn.net/so/search?q分布式&spm1001.2101.3001.7020)3、分布式鎖4、全局ID5、計數器6、限流7、位統計 Redis有5中數據類型&#xff1a; SSHLZRedis中一個key的值每天12點過期&#xff…

Cookie、Session、CBV加裝飾器的三種方法

【0】cookie、session和Token的發展史 【1】Cookie的形式 存儲形式&#xff1a;k&#xff1a;v鍵值對存儲位置&#xff1a;客戶端缺點&#xff1a;不安全&#xff0c;信息可能會泄露 【2】session的形式 標識符&#xff0c;表示我是當前用戶加密出來的數據對敏感信息進行加密…

排序算法-----快速排序(非遞歸實現)

目錄 前言 快速排序 基本思路 非遞歸代碼實現 前言 很久沒跟新數據結構與算法這一欄了&#xff0c;因為數據結構與算法基本上都發布完了&#xff0c;哈哈&#xff0c;那今天我就把前面排序算法那一塊的快速排序完善一下&#xff0c;前面只發布了快速排序遞歸算法&#xff0c;…

單鏈表相關面試題--3.鏈表的中間節點

3.鏈表的中間節點 876. 鏈表的中間結點 - 力扣&#xff08;LeetCode&#xff09; /* 解題思路&#xff1a; 通過快慢指針找到中間節點&#xff0c;快指針每次走兩步&#xff0c;慢指針每次走一步&#xff0c;當快指針走到結尾的時候&#xff0c;慢指針正好走到中間位置 */ typ…

HTTPS協議的加密流程

目錄 一&#xff0c;HTTPS是什么 二&#xff0c;兩種加密方式 三&#xff0c;HTTPS的加密過程 3.1 引入對稱加密 3.2 引入非對稱加密 3.3 引入證書 一&#xff0c;HTTPS是什么 HTTPS也是一個應用層協議&#xff0c;它是在HTTP協議的基礎上引入了一個加密層。因為HTTP協議…

每天一道算法題(十)——獲取和為k的子數組

文章目錄 1、問題2、示例3、解決方法&#xff08;1&#xff09;方法1——雙指針 總結 1、問題 給你一個整數數組 nums 和一個整數 k &#xff0c;請你統計并返回 該數組中和為 k 的子數組的個數 。 子數組是數組中元素的連續非空序列。 2、示例 示例 1&#xff1a; 輸入&#x…

多分類自定義采樣比例

多分類自定義采樣比例 import torch from torch.utils.data import DataLoader, Dataset, WeightedRandomSampler from torchvision import transforms from torchvision.datasets import ImageFolder# 假設你有一個自定義的數據集類 class CustomDataset(Dataset):def __init…

51單片機按鍵控制LED燈亮滅的N個玩法

51單片機按鍵控制LED燈亮滅的N個玩法 1.概述 這篇文章介紹按鍵的使用&#xff0c;以及通過控制LED燈的小實驗&#xff0c;發現按鍵中存在的問題&#xff0c;然后思考并解決這些問題。達到熟練使用按鍵控制元器件。 2.搭建硬件環境 1.硬件準備 名稱型號數量單片機STC12C205…

2023全球數字貿易創新大賽9-12

目錄 回答評委提問:先說痛點-再說怎樣解決 食品安全溯源是否全流程 星火? 鏈網

Sleuth

Sleuth 一 引言 隨著服務的越來越多&#xff0c;對調?鏈的分析會越來越復雜。它們之間的調?關系也許如下圖&#xff1a; 問題&#xff1a; 1&#xff1a;微服務之間的調?錯綜復雜&#xff0c;?戶發送的請求經歷那些服務&#xff0c;調?鏈不清楚&#xff0c;沒有? 個?…

【SpringCloud微服務全家桶學習筆記-Hystrix(服務降級,熔斷,接近實時的監控,服務限流等)】

服務雪崩 &#xff08;微服務面臨的問題&#xff09; 多個微服務之間調用的時候&#xff0c;假設微服務A調用微服務B和微服務C&#xff0c;微服務B和微服務C又調用其它的微服務&#xff0c;這就是所謂的“扇出”。如果扇出的鏈路上某個微服務的調用響應時間過長或者不可用&…

HarmonyOS開發(五):常用基礎組件

1、組件介紹 組件&#xff08;Component&#xff09;,是界面搭建及顯示的最小單元。 組件根據功能可以分為五大類&#xff1a;基礎組件、容器組件、媒體組件、繪制組件、畫布組件 2、基礎組件 基礎組件是視圖層的基本組成單元&#xff0c;它包含&#xff1a;Text、Image、T…

OpenCV C++ 張正友相機標定【相機標定原理、相機標定流程、圖像畸變矯正】

文章目錄 3.1 標定原理3.2 相機標定流程步驟1:采集棋盤格圖像,批處理(調整尺寸、重命名)步驟2:提取棋盤格內角點坐標步驟3:進一步提取亞像素角點信息在棋盤標定圖上繪制找到的內角點(非必須,僅為了顯示)步驟4:相機標定--計算出相機內參數矩陣和畸變系數步驟5:畸變圖像…

Spring (二)@Order, Ordered 失效

Spring &#xff08;二&#xff09;Order, Ordered 失效 先上例子 public class OrderAnnotationExample {Order(2)static class MyBeanFactoryPostProcessor1 implements BeanFactoryPostProcessor {Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFa…

如何加速JavaScript 代碼運行速度

如何加速JavaScript 代碼運行速度 前言減少DOM訪問避免不必要的變量延遲script加載異步和同步使用異步編程避免使用With關鍵詞 前言 本文主要通過五個方面來講解如何使Js代碼得到性能優化&#xff0c;從而實現加快Js代碼運行速度的作用。那么好&#xff0c;本文正式開始。 減…

感染了后綴為.[bkpsvr@firemail.cc].EKING勒索病毒如何應對?數據能夠恢復嗎?

導言&#xff1a; 在當前數字時代&#xff0c;勒索病毒成為網絡威脅的一大隱患。本文將深入介紹一種名為[bkpsvrfiremail.cc].EKING的勒索病毒&#xff0c;以及如何應對遭受其攻擊后&#xff0c;有效地恢復被加密的數據文件&#xff0c;并提供一些預防措施以減少感染的風險。數…

sqlserver==索引解析,執行計劃,索引大小

1創建測試表 -- 創建大型表 CREATE TABLE LargeTableWithIndex (ID int IDENTITY(1,1) PRIMARY KEY,IndexedColumn int,NonIndexedColumn nvarchar(255),OtherData nvarchar(255) );2插入測試數據 -- 使用 T-SQL 插入大量數據 DECLARE @i int = 1; WHILE @i <= 100000 -- …