在項目中使用文件上傳功能時,需求是不能直接彈出彈框,要先二次確認或進行提示。引申開來,即可在打開選擇文件彈框之前,做一系列操作。
實現思路在基於element-upload組件的基礎上,再加一個按鈕,觸發按鈕后進行選擇文件前的操作,操作完成后觸發upload的選擇文件。
具體效果:點擊‘導入‘時,提示必選項。
具體實現:
1、新寫一個‘導入’按鈕,以定位的形式遮擋上傳組件。這里是將element-upload進行了二次封裝。
組件使用: <div class="importBox"> <el-button type="primary" icon="el-icon-upload2" class="box_btn" @click="onImport">導入</el-button> <ImportExcel ref="importFile" class="box_upload"@getImportFile='getImportFile'/> </div> 組件定義: <template> <el-upload class="upload-demo" ref="fileRefs" :action="action" :show-file-list="false" :accept="acctype" :limit="limit" :http-request="uploadFileRes" :before-upload="beforeAvatarUpload" > <el-button :loading="uploadLoading" type="primary" >導入</el-button> </el-upload> </template>
2、點擊‘導入’觸發事件。
// 按鈕-導入 onImport() { // 可以先進行適合自己需求的操作,完成后再執行
this.$refs['importFile'].$refs['fileRefs'].$refs['upload-inner'].handleClick()觸發選擇文件 this.$refs.searchForm.validate((valid) => { if (valid) { this.$refs['importFile'].$refs['fileRefs'].$refs['upload-inner'].handleClick() } }) },
3、解析:
this.$refs['importFile'].$refs['fileRefs'].$refs['upload-inner'].handleClick()
通過ref逐層觸發組件內按鈕的handleClick事件,注意區分['importFile']、['fileRefs'],其中['upload-inner'] 是 ImportExcel 組件內部按鈕的ref
可以將不同的ref在控制台打印出來,看具體內容。
總結:示例只是對選擇文件前的表單進行校驗,根據自己需求可以實現不同的文件選擇前的處理。持續探索,不斷進步!