拆解 UI 組件 el-upload 文件上傳

2021-02-20 素燕

前段時間對 element-ui 進行了一次改造 4天快速落地團隊內部的UI組件庫,在改造 el-upload 這個組件時,遇到了一些問題,官方文檔寫的比較簡單,對剛接觸這個組件的人來說並不友好,如果不看源碼真不知道是幹啥用的。「文檔弱」似乎是國內的通病,包括看小程序的文檔,都是這樣的,大多數都是一筆而過,搞得開發者一臉懵逼。

el-upload 主要由 3 塊組成:

第一部分:文件選擇

文件選擇部分是通過對 input 標籤進行封裝,可以看下源碼:

<input   type="file"   ref="input"   name={name}   on-change={handleChange}   multiple={multiple}   accept={accept}></input>

對外提供了如下屬性:

name:上傳時的文件名,也是 input 標籤的 name 屬性值;

drag:是否可以支持拖拽選擇文件;

accept:都可以選擇哪些類型的文件,比如選擇圖片;

multipe:是否支持選擇多個文件;

limit:最大允許選擇的文件個數;

auto-upload:選擇完文件是否自動開始上傳;

disable:是否阻止用戶選擇文件;

on-exceed:當用戶選擇的文件個數,超出 limit 屬性定義的值時觸發的回調;

第二部分:上傳服務

選擇完文件即可進行上傳處理,上傳服務其實是通過對XMLHttpRequest 進行了封裝,實現文件上傳。  

在文件上傳之前可以設置一些參數:

action:上傳地址,也就是後端提供的上傳服務地址;

headers:http 請求時用到的請求頭;

data:http 請求需要用到的額外參數;

with-credentials:發送 cookie 憑證信息;

http-request:開發者自己提供上傳服務;

在上傳的過程中可以監聽到上去期間的各個事件:

on-success:文件上傳成功回調;

on-error:文件上傳失敗回調;

on-progress:文件上傳時進度的回調;

before-upload:在文件上傳時,可以告知 el-upload 是否允許本次的上傳,可支持 Promise;

第三部分:上傳列表

用戶上傳文件後,el-upload 提供了一個列表用來顯示上傳的結果。可通過下面這些屬性對上傳列表進行幹預:

list-type:文件列表的樣式,目前提供了 3 種樣式,分別為:text、picture、picture-card;

show-file-list:是否顯示上傳列表;

on-preview:點擊上傳列表中某個文件時觸發的回調;

on-remove:文件列表移除文件時的回調;

before-remove:是否阻止文件刪除;


提供了 2 個 slot

slot 的作用是能夠讓使用者更大程度地定製 UI:

提供了 3 個方法:

這些方法其實是給 vue 組件提供的方法,要想調用方法,必須獲得組件的實例,可通過 ref 來獲取組件的實例,關於 ref 的使用可以看我前面寫的文章 refs - 訪問DOM或組件實例。clearFiles:清空已上傳的文件列表(該方法不支持在 before-upload 中調用);

寫在最後

el-upload 在處理上傳列表方面並不靈活,比如上傳過程中自動把上傳失敗的文件刪除掉,大多數場景需要自定義上傳列表,比如有個需求,文件上傳前,UI 是這樣的:

當有文件時,UI 是這樣的:

遇到這個需求不得不自定義上傳列表。這時就體現出了基於 element-ui 打造私有 UI 庫的好處,可以隨便玩。

長按關注

幫助 10W 人入門並進階前端

官網:https://lefex.gitee.io/

相關焦點

  • element-ui隱藏組件el-scrollbar
    對的,你沒看錯,雖然在官方文檔中沒有給出這個組件,但是在源碼中是有的。所以我們可以直接使用:<el-scrollbar></el-scrollbar>很多人或許不知道這個組件是幹嘛的,簡單說就是滾動條。。。
  • javaWeb中,如何通過Commons-FileUpload組件上傳文件
    大家好,歡迎來到雄雄的小課堂,今天給大家分享的是《javaWeb中,如何通過Commons-FileUpload組件上傳文件比如在QQ空間中我們上傳的照片,在博客中我們上傳的工具插件,均離不開文件上傳,那麼,今天我們就來看看,javaweb中,是如何實現文件上傳的?
  • element-ui使用實例
    在 Form 組件中,每一個表單域由一個 Form-Item 組件構成,表單域中可以放置各種類型的表單控制項,包括 Input、Select、Checkbox、Radio、Switch、DatePicker、TimePicker 阻止默認行為即:當一個 form 元素中只有一個輸入框時,在該輸入框中按下回車應提交該表單。
  • Springboot+Vue實現上傳文件顯示進度條效果功能
    文件上傳成功頁面 文件上傳成功路勁'element-ui/lib/theme-chalk/index.css'import locale from 'element-ui/lib/locale/lang/en' import '@/styles/index.scss' import App from '.
  • 【第1537期】Fusion Next 之 Upload 上傳組件設計思路
    正文從這開始~~Upload 組件設計的目標是解決用戶上傳文件的便利性,但是中後臺 Upload 組件的場景是多種多樣的,所以可擴展能力是 Upload 組件不可忽視的另一方面。我們可能的期望是在任何瀏覽器下交互和UI都一致的組件。文件上傳完後頁面會刷新帶來的體驗問題原生的文件上傳都是通過form post 上傳,上傳完成後整個頁面會重定向到 action 的地址。現在大家已經習慣了 ajax 做數據提交,因為可以不需要reload頁面就可以帶來整個頁面的數據更新,無刷新更新的體驗會提升很多。
  • SpringBoot + Vue 實現文件的上傳與下載
    簡單案例2.1 功能需求前臺使用 ElementUI 的 Upload 組件或者是 Axios,後臺使用 SpringBoot 來實現文件的上傳與下載2.2 開發環境IDEA-2019.1SpringBoot-2.0.2.RELEASEMaven-3.5.3
  • Spring Boot + Vue 前後端分離,兩種文件上傳方式總結!
    在Vue.js 中,如果網絡請求使用 axios ,並且使用了 ElementUI 庫,那麼一般來說,文件上傳有兩種不同的實現方案:通過 ElementUI 裡邊的 Upload 組件實現文件上傳兩種方案,各有優缺點,我們分別來看。
  • Springboot+Vue實現批量文件上傳(pdf、word、excel)並支持在線預覽功能
    文件上傳轉pdf預覽",tags={"文件上傳轉pdf預覽"})public class UploadParsePdfCtrler { @Value("${web.oring-save-path}") private String savePath; @Value("${web.upload-path}") private String pdftemppath; @Value(
  • jquery uploadify和apache Fileupload實現異步上傳文件示例
    Uploadify + Apache Fileupload異步上傳文件示例1、可以限制上傳文件大小和類型,理論上任何類型的文件都可以上傳(自己根據api配置即可);2、後臺使用Apache commons-fileupload-1.3.1.jar作為上傳工具包,本示例支持一次性多文件上傳;3、文件上傳目錄可以任意指定,請在web.xml中配置;Uploadify api
  • vue 上傳騰訊雲視頻文件等
    title="課程視頻上傳" :visible.sync="box" width="50%">  <div class="upload_video" id="typeContent">    <el-upload class="upload-demo" ref="upload" action="#" :limit="1" :on-remove="handleRemove
  • upload-labs文件上傳學習記錄
    文件成功上傳,可以執行,有絕對路徑,幾個要素牢記,實踐起來還是挺簡單的嘛。Pass-02一樣的頁面,一樣上傳一個php一句話的點會自動去除,但是過濾程序不會去除,源碼中deldot()刪除文件末尾的點。④:特殊符號繞過[2]1.php::$DATA上傳後會生成1.php文件,大寫則生成1.PHP。⑤:路徑拼接繞過利用幾種刪除函數隻刪除一次的特性構造文件名刪除末尾的點,去空為1.php.
  • 使用jquery.upload.js實現異步上傳示例代碼
    您可能感興趣的文章:JFinal使用ajaxfileupload實現圖片上傳及預覽ajaxfileupload.js實現上傳文件功能springMVC使用ajaxFailUpload上傳圖片的方法AjaxUpLoad.js實現文件上傳Ajax 文件上傳進度監聽之upload.onprogress案例詳解AjaxFileUpload.js實現異步上傳文件功能js異步上傳多張圖片插件的使用方法
  • Element-UI 技術揭秘(2)- 組件庫的整體設計
    所以 element-ui 組件的外型、配色、交互都做的非常不錯。作為一個基礎組件庫,還有一個很重要的方面就是組件種類豐富。element-ui 官方目前有 55 個組件,分成了 6 大類,分別是基礎組件、表單類組件、數據類組件、提示類組件、導航類組件和其它類型組件。這些豐富的基礎組件能很好地滿足大部分 PC 端 to B 業務開發需求。
  • UI自動化測試上傳文件方法都在這裡了!
    實施UI自動化測試的時候,經常會遇見上傳文件的操作,那麼對於上傳文件你知道幾種方法呢?今天我們就總結一下幾種常用的上傳文件的方法,並分析一下每個方法的優點和缺點以及哪種方法效率,穩定性更高。upload_element.send_keys(r'E:\CnblogCode\upload_file.html')執行過程可以看到執行過程很順利,且代碼實現簡單,也沒有報錯但是往往現實是殘酷的,因為有的網站的上傳文件並不是採用 input標籤來定義的上傳文件按鈕,所以就無法使用send_keys方法上傳,這也是這個方法的限制
  • 微信小程序雲開發上傳Excel並解析
    安裝lin-ui小程序組件庫快速構建頁面進入miniprogram文件夾下執行下面的命令npm initor以上我們完成了項目基本構建和功能需求的整理,接著就可以編碼啦編碼先寫頁面樣式、然後js邏輯、最後就是雲函數引用lin-ui組件,因為button這種組件常用基礎組件,所以就可以在app.json
  • EasyUI的filebox組件實現多文件上傳的步驟
    EasyUI的filebox組件實現多文件上傳的步驟新增回款記錄詳情裡面有個添加回款記錄文件的按鈕,點擊選擇文件,文件既可以選擇一個也可以選擇多個img點擊並拖拽以移動<tr height="35px">
  • Vue 餓了麼Mint UI組件的基本使用
    /App.vue'Vue.use(MintUI)new Vue({ el: '#app', components: { App }})以上代碼便完成了 Mint UI 的引入。需要注意的是,樣式文件需要單獨引入。
  • KindEditor 網站編輯器組件上傳漏洞利用預警
    攻擊者通過這些網站的 KindEditor 編輯器組件的漏洞進行攻擊利用,KindEditor 組件中的upload_json.php 上傳功能文件允許被直接調用從而實現任意上傳 htm,html,txt 等文件到伺服器。
  • UI自動化測試上傳文件方法都在這裡了
    """-@Time : 2019/7/17 19:14@Auth : linux超@File : upload_file_winspy.py@IDE  : PyCharm@Motto: Real warriors,dare to face the bleak warning,dare to face