VUE使用餓了么的上傳組件時實現圖片預覽

創作靈感

最近在寫項目時,遇到了上傳頭像的需求,我使用的是element組件中的upload組件。但是在使用時,我需要實現預覽、手動上傳頭像等功能。然而在使用餓了么組件時,這些功能還是需要我們自己去手動實現的,在手動實現的時候,大家可能會遇到一些問題,下面我就向大家分享一下我是如何實現的。

關閉自動上傳

要想實現手動上傳,我們就需要關閉el-upload組件的自動上傳。首先,先向大家分享該組件的官方解釋文檔地址:Upload 上傳 | Element Plus

關閉自動上傳的方法為,將其中的auto-upload設置為false即可。需要注意的是,我們需要在auto-upload前加上一個:,既變為:auto-upload="false"。不加:會將后面的識別為字符串。

獲取上傳組件的值

關閉自動上傳以后,我們就需要手動拿到用戶選取的頭像,并在獲取的時候,做到以下兩件事:

1、將獲取的值保存下來,用戶提交時再發送給后端。

2、將獲取的值進行展示。

我們可以注意到,el-upload組件有著多個鉤子函數,我們應當根據自己的需求進行選取。這里我使用的是on-change鉤子函數,也就是當選取的圖片發生改變時,會促發該函數。

值得注意的是,因為我們關閉了自動上傳,所以有許多鉤子函數我們是不能使用的。例如on-success、on-error、on-progress等等函數都是不能再用了,因為我們不會自動上傳,也就不會觸發對應的鉤子函數。因此,這里我使用的是on-change鉤子函數,這個函數在添加文件時會被觸發,和自動上傳無關。

我們的大致思路是,用戶選取了新的頭像——》將新的頭像保存下來,并進行預覽展示。然而,當我們在on-change所綁定的函數內部改變新的頭像值時,卻發現并不能生效。上網查詢了相關博客,發現這是因為該鉤子函數只用于處理一些上傳圖片的邏輯,不能改變頁面內的值。這也就意味著,我們不能直接在該函數內部修改頁面內的值,解決辦法是——在該函數內部調用其他的函數進行值的修改。具體實現如下:

//用戶選擇了頭像function selectNewAvatar(e){//此鉤子函數不能直接修改頁面內的值,調用其他函數修改avatarChange(e.raw)}//更改頭像的值function avatarChange(e){avatar.value=evar reader = new FileReader();reader.readAsDataURL(e);reader.onload=function(event){avatar_url.value=event.target.result}}

可以看到,用戶選擇頭像時調用一個鉤子函數?,但其值的修改并不在這個函數內部進行,而是通過調用另外一個函數來修改頁面內對應的值。

同時,大家可以發現,實現圖片預覽的功能也在該函數中實現,具體為使用了一個FileReader對象來實現。其中e為對應的圖片對象。這里值得注意的是,我們不能直接使用el-upload所獲取的對象,而應該使用其中的raw屬性。這里應該是餓了么組件對該對象進行了一些包裝。

下面再給大家看一下html應該如何書寫,如下:

<el-uploadclass="new-avatar-upload":auto-upload="false":limit="1":on-change="selectNewAvatar":show-file-list="false"
><img v-if="avatar_url" :src="avatar_url" class="new-avatar-upload-img"/><el-icon v-else class="new-avatar-upload-icon"><Plus /></el-icon>
</el-upload>

在html內,圖片的預覽就靠img中的src屬性完成就可以了。

在上述代碼內,您可能會發現,你選取一次頭像以后,再次選取就無效了。這可能是你的最大上傳限制數量為1,這樣你的就不能再向內部添加新的文件了,也就不能觸發on-change鉤子函數了。你只需要將限制的數量設置大一些就好了,因為是手動上傳,最后你手動上傳最新的一張頭像即可。

總結

在使用餓了么的上傳組件實現圖片預覽時,最容易出錯的地方就算鉤子函數內部不能修改頁面內的值。要是你不懂這一個點,很可能一直都是無用功。

最后實現的效果大致如下:

其中,左邊的是之前的頭像,右邊就是你所選擇的新的頭像,并且可以展示出來了。

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

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

相關文章

Linux makefile進度條

語法 在依賴方法前面加上就不會顯示這一行的命令 注意 1.make 會在當前目錄下找名為“makefile” 或者 “Makefile” 的文件 2.為了生成第一依賴文件&#xff0c;如果依賴文件列表有文件不存在&#xff0c;則會到下面的依賴關系中查找 3..PHONY修飾的依賴文件總是被執行的 …

Redis——RDB、AOF和混合持久化機制

Redis提供了三種持久化機制來確保數據的持久保存&#xff0c;分別是RDB&#xff08;Redis DataBase&#xff09;、AOF&#xff08;Append Only File&#xff09;和混合持久化。 RDB&#xff08;Redis DataBase&#xff09; RDB持久化機制是將Redis在內存中的數據保存到磁盤上的…

xss-lab 1-18關payload

Less-1 ?name<script>alert()</script> Less-2 "><script>alert()</script> "οnclick"alert() " οnfοcus"alert() " οnblur"alert() Less-3 οnfοcusalert() οnbluralert() οnfοcusjavascript:aler…

Spring AopUtils深度解析:從入門到精通的全方位指南

1. 概述 AopUtils是Spring框架中的一個工具類&#xff0c;主要用于處理AOP&#xff08;面向切面編程&#xff09;相關的操作。它提供了一系列靜態方法&#xff0c;幫助開發者更方便地處理AOP中的對象、代理以及通知&#xff08;Advice&#xff09;等。 2. 用途 AopUtils的主要…

操作系統原理與系統——實驗十三多道批處理作業調度(作業可移動)

關鍵代碼 #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct data{int hour;//當前小時int min;//當前分鐘 }time; struct node{char name[20];//進程名time arrive;//到達就緒隊列時間int zx;//執行時間(預期時間)int size;int ta…

Polygon市值機器人

隨著區塊鏈技術的蓬勃發展和數字貨幣市場的日益繁榮&#xff0c;投資者們對于如何精準把握市場動態、實現資產穩健增長的需求愈發迫切。在這個背景下&#xff08;市值管理飛//機//aishutuyu&#xff09;&#xff0c;Polygon市值機器人應運而生&#xff0c;作為一款基于Polygon公…

LeetCode 第397場周賽個人題解

目錄 100296. 兩個字符串的排列差 原題鏈接 思路分析 AC代碼 100274. 從魔法師身上吸取的最大能量 原題鏈接 思路分析 AC代碼 100281. 矩陣中的最大得分 原題鏈接 思路分析 AC代碼 100312. 找出分數最低的排列 原題鏈接 思路分析 AC代碼 100296. 兩個字符串的排…

timerfd加epoll封裝定時器

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 1、用timerfd加epoll封裝定時器的優點2、代碼實現 1、用timerfd加epoll封裝定時器的優點 定時器為什么需要timerfd 在設計定時器時&#xff0c;我們首先想到的就是…

【SpringBoot】Redis Lua腳本實戰指南:簡單高效的構建分布式多命令原子操作、分布式鎖

文章目錄 一.Lua腳本1.Lua特性2.Lua優勢 二.Lua語法1.注釋2.變量3.數據類型&#xff1a;3.1.基本類型3.2.對象類型&#xff1a;表&#xff08;table&#xff09; 4.控制結構&#xff1a;4.1.條件語句: 使用if、else和elseif來實現條件分支。4.2.循環結構&#xff1a;Lua支持for…

Shell參數擴展形式學習筆記

Shell參數擴展形式學習筆記 文章目錄 Shell參數擴展形式學習筆記空值判斷處理 ${parameter:-word} ${parameter:word} ${parameter:?word} ${parameter:word}變量位置截取 ${parameter:offset} ${parameter:offset:length}變量匹配組合 ${!prefix*} ${!prefix} ${!name[]} ${!…

感知機和神經網絡

引入 什么是神經網絡&#xff1f; 我們今天學習的神經網絡&#xff0c;不是人或動物的神經網絡&#xff0c;但是又是模仿人和動物的神經網絡而定制的神經系統&#xff0c;特別是大腦和神經中樞&#xff0c;定制的系統是一種數學模型或計算機模型&#xff0c;神經網絡由大量的人…

圖像處理:圖像噪聲添加

文章目錄 前言一、高斯噪聲二、椒鹽噪聲三、泊松噪聲四、斑點噪聲五、指數噪聲六、均勻噪聲總結 前言 本文主要介紹幾種添加圖像噪聲的方法&#xff0c;用于數據增強等操作。 以下圖為例。 一、高斯噪聲 高斯噪聲就是給圖片添加一個服從高斯分布的噪聲&#xff0c;可以通過調…

vLLM初探

vLLM是伯克利大學LMSYS組織開源的大語言模型高速推理框架&#xff0c;旨在極大地提升實時場景下的語言模型服務的吞吐與內存使用效率。vLLM是一個快速且易于使用的庫&#xff0c;用于 LLM 推理和服務&#xff0c;可以和HuggingFace 無縫集成。vLLM利用了全新的注意力算法「Page…

Python+PySpark數據計算

1、map算子 對RDD內的元素進行逐個處理&#xff0c;并返回一個新的RDD&#xff0c;可以使用lambda以及鏈式編程&#xff0c;簡化代碼。 注意&#xff1a;再python中的lambda只能有行&#xff0c;如果有多行&#xff0c;要寫成外部函數&#xff1b;&#xff08;T&#xff09;-&…

train_gpt2_fp32.cu - cudaCheck

源碼 // CUDA error checking void cudaCheck(cudaError_t error, const char *file, int line) {if (error ! cudaSuccess) {printf("[CUDA ERROR] at file %s:%d:\n%s\n", file, line,cudaGetErrorString(error));exit(EXIT_FAILURE);} }; 解釋 該函數用于檢查CU…

無人機路徑規劃:基于鯨魚優化算法WOA的復雜城市地形下無人機避障三維航跡規劃,可以修改障礙物及起始點(Matlab代碼)

一、部分代碼 close all clear clc rng(default); %% 載入數據 data.S[50,950,12]; %起點位置 橫坐標與縱坐標需為50的倍數 data.E[950,50,1]; %終點點位置 橫坐標與縱坐標需為50的倍數 data.Obstaclexlsread(data1.xls); data.numObstacleslength(data.Obstacle(:,1)); …

連接和斷開與服務器的連接

要連接到服務器&#xff0c;通常需要在調用mysql時提供一個MySQL用戶名&#xff0c;很可能還需要一個密碼。如果服務器在除了登錄的計算機之外的機器上運行&#xff0c;您還必須指定主機名。聯系您的管理員以找出應該使用哪些連接參數來連接&#xff08;即使用哪個主機、用戶名…

TypeError: can only concatenate str (not “int“) to str

TypeError: can only concatenate str (not "int") to str a 窗前明月光&#xff0c;疑是地上霜。舉頭望明月&#xff0c;低頭思故鄉。 print(str_len len(str_text) : len(a)) 試圖打印出字符串 a 的長度&#xff0c;但是在 Python 中拼接字符串和整數需要使用字符…

【微服務】spring aop實現接口參數變更前后對比和日志記錄

目錄 一、前言 二、spring aop概述 2.1 什么是spring aop 2.2 spring aop特點 2.3 spring aop應用場景 三、spring aop處理通用日志場景 3.1 系統日志類型 3.2 微服務場景下通用日志記錄解決方案 3.2.1 手動記錄 3.2.2 異步隊列es 3.2.3 使用過濾器或攔截器 3.2.4 使…

triton編譯學習

一 流程 Triton-MLIR: 從DSL到PTX - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/671434808Superjomns blog | OpenAI/Triton MLIR 遷移工作簡介https://superjom