欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用element-ui的upload組件上傳代碼包時遇到的問題小結

 更新時間:2022年12月14日 16:01:09   作者:遛狗先生  
這篇文章主要介紹了使用element-ui的upload組件上傳代碼包時遇到的問題及總結,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

1.在工作中使用element-ui的upload組件時,遇到一個問題就是這個upload會自動發(fā)送一個http請求,即使你使用了http-request自定義上傳覆蓋默認上傳函數,也會導致在控制臺里多出一個請求,并且當項目中使用proxy代理掛載到原型上類似的請求接口方法的時候,必須知道原請求路徑放在他的actions屬性中,才可以使它的多余請求不報錯,可能說的有一些混亂,接下來用代碼演示:

export function proxy (interfaceId, proxyOptions = {}) {
  return (data = {}, options = {}) => {
    let config = Object.assign({}, proxyOptions, options)
    return app.api.rpc(interfaceId, data, config)
  }
}

2.在項目中使用類似的接口處理函數的時候,此時的actions里面應該填寫要請求的服務器地址,但是項目中已經把請求封裝且做了統(tǒng)一處理的時候,這個actions就基本不會再去使用它,就算使用也得加上很多環(huán)境使用的判斷條件,actions的局限性由此體現了出來,但是element-ui的官方又給了http-request的方法可以覆蓋默認的上傳函數,接下來我們看一下使用http-request的方法來定義這個上傳函數會出現什么問題?

   // 自定義上傳函數,覆蓋默認的上傳
    uploadSectionFile(params) {
      console.log(params.file);
      console.log(file);
      this.fileName = file.name;
      // apcremiId 組件庫id
      // version 版本號
      // file  壓縮包
      this.impProgressPercent = true;
      let i = 1;
      let timer = setInterval(() => {  // 這只是一個動畫效果可以忽略
        this.importProgressPercent = i;
        i++;
        if (i == 100) {
          clearInterval(timer);
        }
      }, 10);
      let formData = new FormData();  //定義傳向服務器的參數
      formData.append("file", file.raw);
      formData.append("apcremiId", this.apcremiId);
      formData.append("version", this.version);
      formData.append("apcremiCode", this.apcremiCode);
      //接下來是接口請求 // 可以稍微看一下
      this.getRes(formData)
        .then((res) => {
          console.log(res);
          this.handleSuccess();
          let info = {
            packageUrl: res.url,
            packageName: res.packageNm,
            version: res.version,
            idList:res.idList
          };
          this.buildRes(info)
            .then((res) => {
              console.log(res);
              this.expProgressPercent = true;
              let j = 1;
              let timer1 = setInterval(() => {
                this.explainProgressPercent = j;
                j++;
                if (j == 100) {
                  clearInterval(timer1);
                  this.explainStart();
                }
              }, 40);
            })
            .catch((err) => {
              console.log(err);
              this.eError = err.errorMsg
              this.buildError();
            });
        })
        .catch((err) => {
          console.log(err);
          console.log("上傳失敗");
          this.iError = err.errorMsg
          this.handleError();
        });
    },

 3.出現的問題及總結

第一個問題:當傳入組件包的時候發(fā)現上傳文件傳了兩個接口,這個時候在后端有強校驗的情況下,不能重復的傳代碼包,因為上傳代碼包解析之后就會入庫,而入庫的強校驗就會拋出錯誤,前端項目接受后就會彈窗報錯,體驗極其不好,這個是我粗心的問題,還是得看文檔看文檔看文檔,element-ui的upload組件有一個auto-upload屬性默認為true,也就是默認在你選中文件的時候就會調用http-request這個函數,并且就會調用你自己配置的一個上傳,導致上傳兩次報錯

第二個問題:可以看出代碼中一直鏈式調用,然后在promise的函數中寫上傳成功,上傳失敗和進度條的代碼,而element-ui自己的上傳成功等函數就會失效,我當時在想,這個可能是個缺陷,當然這個時候得感謝我的組長,一語點醒,當時他說:組件沒有問題,你使用的有點問題,在源碼中,upload組件內部往我們自定的上傳方法中傳遞了一個options參數,其中包含了對upload上傳文件 success 成功函數和error 失敗函數,也就是說,其實我們也可以在自定義上傳里面主動調用這些鉤子以實現相應功能,當然這就是我自己使用的一個方法,可以算是誤打誤撞了,但是這個方法是有些繁瑣。

如何解決這個問題其實非常簡單,即添加return 語句返回promise 結果,因為我們大多數的請求都是使用axios,而axios返回的就是promise函數,所以只需要在你調用接口的地方去寫一個return去返回他,就不用那么繁瑣的去手動調用,有的時候判斷多了,找不到自己的函數,讓代碼內部自己去判斷,可以說是物盡其用。

之前的代碼可以說減少了一半,閱讀起來也看的清楚了,而那些成功或者失敗觸發(fā)相應的操作只需要在成功或者失敗回調函數中定義就可以了 

 這是在網上找到的一個截圖,可以發(fā)現我們可以通過http-request的自定義方法中的return promise來關聯(lián)內部的成功,失敗函數。

附言:

后端大哥處理導入文件的處理邏輯:

1.處理tgz格式的壓縮包

2.獲取文件流(MultipartFile file)

3.先上傳服務器作為臨時文件供解析使用(解析需要校驗,需要上傳才能解析)

4.判斷指定目錄下指定文件是否存在,存在的話就解析json格式文件,并返回jsonArray數組

5.將臨時文件復制到指定目錄(因為只能在指定目標目錄下才能構建)

6.根據jsonArray的數據入庫,返回構建的需要參數

7.根據所傳參數構建vue組件(這里的vue組件就是一個頁面)

到此這篇關于使用element-ui的upload組件上傳代碼包時遇到的問題及總結的文章就介紹到這了,更多相關element-ui的upload組件上傳內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • javascript實現根據函數名稱字符串動態(tài)執(zhí)行函數的方法示例

    javascript實現根據函數名稱字符串動態(tài)執(zhí)行函數的方法示例

    這篇文章主要介紹了javascript實現根據函數名稱字符串動態(tài)執(zhí)行函數的方法,結合實例形式分析了JS函數名的判斷及函數動態(tài)調用相關操作技巧,需要的朋友可以參考下
    2016-12-12
  • JavaScript原型式繼承實現方法

    JavaScript原型式繼承實現方法

    這篇文章主要介紹了JavaScript原型式繼承實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • javascript控制Div層透明屬性由淺變深由深變淺逐漸顯示

    javascript控制Div層透明屬性由淺變深由深變淺逐漸顯示

    控制Div層透明屬性,由淺變深逐漸顯示,由深變淺逐漸消失,具體實現代碼如下,喜歡的朋友可以感受下
    2013-11-11
  • apply和call方法定義及apply和call方法的區(qū)別

    apply和call方法定義及apply和call方法的區(qū)別

    apply和call功能一樣,只是傳入的參數列表形式不同,本文給大家介紹apply和call方法定義及apply和call方法的區(qū)別,感興趣的朋友一起學習吧
    2015-11-11
  • webpack5 常用插件使用問題小結

    webpack5 常用插件使用問題小結

    webpack 是一個模塊打包器,這篇文章主要介紹了webpack5 常用插件使用問題小結,每次打包完都需要手動刪除掉dist文件目錄,使用CleanWebpackPlugin就可自動清除dist目錄,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • javascript中關于類型判斷的一些疑惑小結

    javascript中關于類型判斷的一些疑惑小結

    這篇文章主要給大家介紹了關于javascript中關于類型判斷的一些疑惑,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-10-10
  • Javascript小技能總結(推薦)

    Javascript小技能總結(推薦)

    本文是小編日常收集整理的有個js中的一些小技能,非常實用,值得推薦給大家,感興趣的朋友快來收藏吧
    2016-06-06
  • JavaScript移動端常用事件之touch觸摸事件詳解

    JavaScript移動端常用事件之touch觸摸事件詳解

    觸屏事件touch也稱為觸摸事件,touch對象代表一個觸摸點,觸摸點可能是一根手指,也可能是一根觸摸筆,觸屏事件可響應用戶手指(或觸摸筆)對屏幕或者觸控板操作,下面這篇文章主要給大家介紹了關于JavaScript移動端常用事件之touch觸摸事件的相關資料,需要的朋友可以參考下
    2022-10-10
  • 利用JS延遲加載百度分享代碼,提高網頁速度

    利用JS延遲加載百度分享代碼,提高網頁速度

    相信大家經常在一些網站上看到有快捷分享到各大流行網站的按鈕,目前流行的有JiaThis、百度分享、Bshare等,目前用百度分享的居多
    2013-07-07
  • Javascript中的作用域和上下文深入理解

    Javascript中的作用域和上下文深入理解

    這篇文章主要介紹了Javascript中的作用域和上下文深入理解,本文講解了作用域 VS 上下文、變量作用域、“this”上下文、執(zhí)行上下文(Execution Context)、作用域鏈等內容,需要的朋友可以參考下
    2015-07-07

最新評論