問題所在:今天遇到了一個需求,上傳組件保證每次只上傳一個文件惭蹂,并且當(dāng)用戶選擇下一個文件,在待上傳列表中要將原文件替換成新選擇的文件
嘗試經(jīng)過:剛開始我看到了官方API上面提供了:limit
:on-exceed
兩個屬性蜂怎,可以用來限制上傳文件的個數(shù)以及超過限制之后的處理方法handleExceed
:file-list="fileList">
:limit="1"
:on-exceed="handleExceed"
//files是本次選擇的文件
//fileList是當(dāng)前uploader對象中待上傳的文件列表
handleExceed(files, fileList) {
this.$message.warning(`當(dāng)前限制選擇 3 個文件杠步,本次選擇了 ${files.length} 個文件氢伟,共選擇了 ${files.length + fileList.length} 個文件`);
},
按照這個思路,我就要在handleExceed
方法中將本次選擇的文件files
封裝成一個列表賦值給this.fileList
幽歼,就能實(shí)現(xiàn)我想要的效果朵锣,但是真正實(shí)施之后,發(fā)現(xiàn)handleExceed
的兩個參數(shù)files
和fileList
中的對象并不一致甸私,我還需要額外的在添加一些參數(shù)诚些,才能保證files
封裝之后的數(shù)組對象參數(shù)和uploader
中的一致,這就有點(diǎn)大可不必了皇型,所以我又換了另一種方法
真正解決方法:我偶然看見了:on-change
這個屬性诬烹,發(fā)現(xiàn)可以輕松的解決
:on-change="handleChange"
handleChange(file, fileList) {
this.fileList = fileList.slice(-1);
}
API上聲明這個屬性是在:文件狀態(tài)改變時的鉤子,添加文件弃鸦、上傳成功和上傳失敗時都會被調(diào)用绞吁。
所以只要我新添加了一個文件,我就直接獲取當(dāng)前uploader
中待上傳列表中的最后一個文件家破,賦值給this.fileList
,就可以保證每次選取一個新文件之后购岗,經(jīng)過這個方法的處理汰聋,uploader
當(dāng)前上傳列表中只有新選取的一個文件,完美解決了我的需求