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

element自定義 多文件上傳 觸發(fā)多次on-change問題

 更新時(shí)間:2023年03月28日 09:34:51   作者:網(wǎng)館  
這篇文章主要介紹了element自定義 多文件上傳 觸發(fā)多次on-change問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

element自定義 多文件上傳 觸發(fā)多次on-change

由于項(xiàng)目需要,圖片上傳需要進(jìn)行壓縮之后在調(diào)用接口,那就只能走自定義上傳

自定義上傳關(guān)鍵在于:

  • action  = #
  • :auto-upload="false"
<el-upload
? ? ref="upload"
? ? action="#" ?// 上傳入口改成 #
? ? :multiple="true" // 多文件上傳開啟
? ? :on-change="handleChange" // 改變監(jiān)聽
? ? :file-list="fileList" ?//文件列表
? ? :auto-upload="false" // 自動(dòng)上傳關(guān)閉
>
? ? <i class="el-icon-plus"></i>
</el-upload>?

由于 auto-upload 設(shè)置為 false 之后,before-upload 會(huì)失效,所以上傳的事件之前體現(xiàn)在 change 里。

但是這樣呢在上傳文件時(shí)無論是多圖還是單圖,在上傳后都會(huì)走2次 handleChange ,

此時(shí)我們需要一個(gè)防抖方法,來限制它。

handleChange(file, fileList) {
? /*
? ? ? 自動(dòng)上傳改成true會(huì)導(dǎo)致重復(fù)觸發(fā),所以在handleChange上傳文件
? ? */
? // ?防抖
? let length = fileList.length
? this.maxLength = Math.max(length, this.maxLength)
? setTimeout(() => {
? ? if (length === this.maxLength) {
? ? ? // 你的上傳文件邏輯
? ? }
? }, 100)
}

this.maxLength 默認(rèn)設(shè)置 0 就行,要記得在上傳成功(完成)后需要設(shè)置為默認(rèn) 0。

下面附上我完整的代碼

change 事件

handleChange(file, fileList) {
? /*
? ? ? 自動(dòng)上傳改成true會(huì)導(dǎo)致重復(fù)觸發(fā),所以在handleChange上傳文件
? ? */
? // ?防抖
? let length = fileList.length
? this.maxLength = Math.max(length, this.maxLength)
? setTimeout(() => {
? ? if (length === this.maxLength) {
? ? ? ? // 圖片驗(yàn)證
? ? ? this.uploadFilesVerification(fileList)
? ? }
? }, 100)
}

圖片驗(yàn)證: uploadFilesVerification

// 圖片驗(yàn)證
async uploadFilesVerification(fileList) {
? let resFileList = []
? for (const key in fileList) {
? ? console.log('fileList[key] :>> ', fileList[key])
? ? // 判斷文件大小(5M)
? ? if (fileList[key].size > 1024 * 1024 * 5) {
? ? ? this.$message.warning('圖片大小不可以超過5M')
? ? ? return
? ? }
? ? // 圖片壓縮(這里用的 lrz,項(xiàng)目不需要可以忽略)
? ? const lrzData = await lrz(fileList[key].raw, { quality: 0.5 })
? ? // 內(nèi)容驗(yàn)證
? ? // ?xxxx
?
? ? resFileList.push(lrzData.origin)
? }
?
? // 上傳圖片
? this.customUploadFn(resFileList)
?
}

自定義上傳:customUploadFn

// 自定義上傳
async function customUploadFn(fileList) {
? let form = new FormData()
? fileList.forEach((item) => {
? ? form.append('files', item)
? })
? const { data } = await uploadFiles(form) // 上傳 api 接口
? console.log('data :>> ', data)
? data.forEach((item) => {
? ? this.goodsImgList.push(item) // 圖片回顯數(shù)組
? })
? this.fileList = [] // 清空?qǐng)D片已經(jīng)上傳的圖片列表(綁定在上傳組件的file-list)
? this.maxLength = 0 // 恢復(fù)默認(rèn)值
}

el-upload自定義上傳觸發(fā)多次change事件解決

昨天在做項(xiàng)目時(shí),有個(gè)附件上傳的需求,需要使用formdata上傳文件,并且支持多文件上傳,使用el-upload on-change時(shí)發(fā)現(xiàn)會(huì)調(diào)用多次,以下是我整理出來規(guī)避的方法。

vue部分:

<el-upload
?:on-change="handleUpload"
?:on-remove="handleRemove"
?:auto-upload="false"
?:show-file-list="false"
?drag
?action="#"
?ref="upload"
?multiple
?style="display:none;"
?>
? <div class="el-upload__text">拖拽文件或點(diǎn)擊上傳</div>
</el-upload>

ts/js部分:

? // 附件上傳
? private handleUpload(file, fileList) {
? ? let length = fileList.length;
? ? this.maxFileLength = Math.max(length, this.maxFileLength)
? ? setTimeout(() => {
? ? ? if (this.maxFileLength !== length) {
? ? ? ? return
? ? ? }
? ? ? fileList.forEach(item => {
? ? ? ? this.fileList.push(item.raw)
? ? ? })
? ? }, 0)
? }

定義一個(gè)全局變量maxFileLength 用于計(jì)算當(dāng)前上傳次數(shù),如果上傳次數(shù)等于上傳文件的數(shù)量長(zhǎng)度則將文件放到當(dāng)前下發(fā)文件的參數(shù)中。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue處理get/post的http請(qǐng)求的實(shí)例

    vue處理get/post的http請(qǐng)求的實(shí)例

    本文主要介紹了vue處理get/post的http請(qǐng)求的實(shí)例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 圖文講解vue的v-if使用方法

    圖文講解vue的v-if使用方法

    在本篇文章里我們給大家分享了關(guān)于vue的v-if使用方法的相關(guān)知識(shí)點(diǎn),有興趣的朋友們跟著學(xué)習(xí)下。
    2019-02-02
  • 基于Vue 擼一個(gè)指令實(shí)現(xiàn)拖拽功能

    基于Vue 擼一個(gè)指令實(shí)現(xiàn)拖拽功能

    這篇文章主要介紹了Vue 指令實(shí)現(xiàn)拖拽功能,實(shí)現(xiàn)原理很簡(jiǎn)單,文中通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Vue3+Vue Router實(shí)現(xiàn)動(dòng)態(tài)路由導(dǎo)航的示例代碼

    Vue3+Vue Router實(shí)現(xiàn)動(dòng)態(tài)路由導(dǎo)航的示例代碼

    隨著單頁(yè)面應(yīng)用程序(SPA)的日益流行,前端開發(fā)逐漸向復(fù)雜且交互性強(qiáng)的方向發(fā)展,在這個(gè)過程中,Vue.js及其生態(tài)圈的工具(如Vue Router)為我們提供了強(qiáng)大的支持,本文將介紹如何在Vue 3中使用Vue Router實(shí)現(xiàn)動(dòng)態(tài)路由導(dǎo)航,需要的朋友可以參考下
    2024-08-08
  • vue?ElementUI級(jí)聯(lián)選擇器回顯問題解決

    vue?ElementUI級(jí)聯(lián)選擇器回顯問題解決

    這篇文章主要介紹了vue?ElementUI級(jí)聯(lián)選擇器回顯問題解決,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • Vue實(shí)現(xiàn)過渡效果的基本方法

    Vue實(shí)現(xiàn)過渡效果的基本方法

    Vue 提供了一個(gè)強(qiáng)大的過渡系統(tǒng),可以用于在進(jìn)入、離開和列表渲染時(shí)添加各種動(dòng)畫效果,這些過渡不僅能夠提升用戶體驗(yàn),還能使界面更加生動(dòng)和吸引人,本文將介紹 Vue 中實(shí)現(xiàn)過渡效果的基本方法,并提供使用 setup 語法糖的代碼示例,需要的朋友可以參考下
    2024-09-09
  • Vue3使用TypeIt實(shí)現(xiàn)文字打字機(jī)效果的代碼示例

    Vue3使用TypeIt實(shí)現(xiàn)文字打字機(jī)效果的代碼示例

    在現(xiàn)代網(wǎng)頁(yè)設(shè)計(jì)中,文字打字機(jī)效果是一種非常流行的動(dòng)畫效果,能夠吸引用戶的注意力并提升用戶體驗(yàn),本文將介紹如何在 Vue 3 中使用 TypeIt 庫(kù)實(shí)現(xiàn)文字打字機(jī)效果,并分享一些實(shí)用的技巧和示例,需要的朋友可以參考下
    2025-01-01
  • 優(yōu)雅的將ElementUI表格變身成樹形表格的方法步驟

    優(yōu)雅的將ElementUI表格變身成樹形表格的方法步驟

    這篇文章主要介紹了優(yōu)雅的將ElementUI表格變身成樹形表格的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • vue項(xiàng)目中導(dǎo)入swiper插件的方法

    vue項(xiàng)目中導(dǎo)入swiper插件的方法

    這篇文章主要介紹了vue項(xiàng)目中導(dǎo)入swiper插件的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • vue todo-list組件發(fā)布到npm上的方法

    vue todo-list組件發(fā)布到npm上的方法

    這篇文章主要介紹了vue todo-list組件發(fā)布到npm上的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-04-04

最新評(píng)論

连江县| 县级市| 武功县| 沂南县| 沐川县| 巫溪县| 永德县| 神木县| 科尔| 将乐县| 昌乐县| 诏安县| 昌乐县| 涿州市| 准格尔旗| 诏安县| 正安县| 咸宁市| 招远市| 墨竹工卡县| 会同县| 南溪县| 钦州市| 塔城市| 宜阳县| 绵竹市| 邯郸市| 西华县| 丹棱县| 平凉市| 岱山县| 增城市| 台安县| 射洪县| 廊坊市| 大新县| 曲水县| 河北省| 栾城县| 亳州市| 灵丘县|