組件中多個el-upload存在導(dǎo)致上傳圖片失效的問題及解決
組件中多個el-upload存在導(dǎo)致上傳圖片失效
情景介紹
公司中開發(fā)的后臺系統(tǒng)使用的是vue + Avue + elm組件,在打開新增的彈窗的后彈窗內(nèi)有一個點擊新增配置按鈕會自動生成一行表格的功能,在生成的表格中有一列是上傳圖片的功能,由于配置詳情這個字段下的表格是手動生成的,導(dǎo)致二次上傳表格內(nèi)的封面圖的時候會出現(xiàn)上傳沒任何反應(yīng)的情況
百度了很久也沒找到解決辦法,最后經(jīng)過一步一步的嘗試發(fā)現(xiàn)elm組件在頁面首次渲染只會初始化一次的情況。
功能圖片

嘗試的解決辦法
方法1
在el-upload上動態(tài)綁定ref,這樣在每次上傳成功后我都通過獲取對應(yīng)的ref調(diào)用上傳組件的clearFiles()進行文件清空操作,這樣方便二/N次上傳仍然是生效的;
<avue-crud :option="configOption" :data="formData.configDetails">
<template slot="coverImg" slot-scope="scope">
<el-upload
class="avatar-uploader"
accept="image/*"
:http-request="(param) => uploadImage(param, scope.row)"
action="~~"
:limit="1"
:ref="'coverPicUpload' + scope.row.$index"
:show-file-list="false"
:before-upload="beforeUpload"
>
<el-image
style="width: 300px; height: 150px"
fit="contain"
v-if="scope.row.picUrl"
:src="scope.row.picUrl"
>
</el-image>
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
<div style="color:red;">圖片格式: jpg/gif 圖片尺寸: 1920X1080</div>
</template>
</avue-crud> //上傳封面圖片
uploadImage(param, row) {
....執(zhí)行上傳的方法,上傳成功后執(zhí)行下行代碼
this.$refs['coverPicUpload'+row.$index].clearFiles()
},方法1的結(jié)果:
并沒有解決我的問題,仍然只有彈窗首次打開初始化的那一行的上傳在多次點擊的時候能正常使用,手動添加的幾行只有第一次上傳能正常,二次點擊就沒有反應(yīng);
方法2
在1的基礎(chǔ)上,同時對el-upload進行初始化,也就是在el-upload組件的任意上級元素上添加 v-if="updateInit",在每次手動新增一行的時候會讓所有的el-upload進行初始化,這樣每一行都會有自己的上傳組件;
<el-form-item v-if="updateInit" label="配置詳情:" prop="configDetails">
<avue-crud :option="configOption" :data="formData.configDetails">
<template slot="coverImg" slot-scope="scope">
<el-upload
class="avatar-uploader"
accept="image/*"
:http-request="(param) => uploadImage(param, scope.row)"
action="~~"
:limit="1"
:ref="'coverPicUpload' + scope.row.$index"
:show-file-list="false"
:before-upload="beforeUpload"
>
<el-image
style="width: 300px; height: 150px"
fit="contain"
v-if="scope.row.picUrl"
:src="scope.row.picUrl"
>
</el-image>
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
<div style="color:red;">圖片格式: jpg/gif 圖片尺寸: 1920X1080</div>
</template>
</avue-crud>
</el-form-item> // 新增配置
addConfig() {
this.updateInit = false
this.formData.configDetails.push({
title: "",
picKey: "",
picUrl: "",
});
this.$nextTick(() => {
this.updateInit = true
})
},方法2結(jié)果:完美解決多次上傳失效問題!
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue導(dǎo)出json數(shù)據(jù)到Excel電子表格的示例
本篇主要介紹了Vue導(dǎo)出json數(shù)據(jù)到Excel電子表格的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12
為什么Vue3.0使用Proxy實現(xiàn)數(shù)據(jù)監(jiān)聽(defineProperty表示不背這個鍋)
這篇文章主要介紹了為什么Vue3.0使用Proxy實現(xiàn)數(shù)據(jù)監(jiān)聽?defineProperty表示不背這個鍋,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
vue-router vuex-oidc動態(tài)路由實例及功能詳解
這篇文章主要為大家介紹了vue-router vuex-oidc動態(tài)路由實例及功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11
Vue學(xué)習(xí)筆記進階篇之過渡狀態(tài)詳解
本篇文章主要介紹了Vue學(xué)習(xí)筆記進階篇之過渡狀態(tài)詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07
Vue自定義指令實現(xiàn)彈窗拖拽四邊拉伸及對角線拉伸效果
小編最近在做一個vue前端項目,需要實現(xiàn)彈窗的拖拽,四邊拉伸及對角線拉伸,以及彈窗邊界處理功能,本文通過實例代碼給大家分享我的實現(xiàn)過程及遇到問題解決方法,感興趣的朋友一起看看吧2021-08-08

