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

公共組件父子依賴調(diào)用及子校驗(yàn)父條件問題解決

 更新時(shí)間:2022年10月17日 08:44:20   作者:從前有只碼農(nóng)  
這篇文章主要介紹了如何解決公共組件父子組件依賴調(diào)用和子組件校驗(yàn)父組件條件的問題,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

問題背景

業(yè)務(wù)需求需要用到一個(gè)數(shù)據(jù)批量上傳和上傳模板導(dǎo)入功能,并且在很多個(gè)頁面中都需要用到。但是每個(gè)頁面調(diào)用的上傳或模版下載依賴的接口地址或者接口方法都有區(qū)別?;诖耍胍獙⑦@個(gè)公共上傳組件抽離出來,并且盡量低耦合,能夠滿足不同頁面的調(diào)用和傳參。

以下言論,是一個(gè)小白解決問題的過程,若思考思路和知識(shí)面限制,還請(qǐng)各路大佬指點(diǎn)

  • 痛點(diǎn)一:如何解決不同頁面的接口調(diào)用方法依賴問題
  • 痛點(diǎn)二:如何解決在調(diào)用頁面執(zhí)行組件內(nèi)部的某些方法前,如何添加父級(jí)組件層面的校驗(yàn)問題

關(guān)于依賴

嘗試動(dòng)態(tài)注入依賴

import

關(guān)于痛點(diǎn)一,第一個(gè)想到的,就是能不能執(zhí)行依賴的動(dòng)態(tài)注入,但是所有的接口調(diào)用方法均按模塊封裝成api.js文件,并且模塊中通過export 進(jìn)行導(dǎo)出,需要使用import { xxx } form './XXXpath'導(dǎo)出到組件中,方能進(jìn)行使用。并且import導(dǎo)入為靜態(tài)導(dǎo)入,于是放棄這個(gè)嘗試。

require

接下來想到另一個(gè)導(dǎo)入的方式require,但是require導(dǎo)入的是一個(gè)模塊(具體了解CommonJS),而接口api.js 如果重新改動(dòng),牽扯太多,于是也放棄此法。

其他思考

如果將api.js放到公共組件中,則耦合度會(huì)很高,后期新增或者修改接口依賴,或者進(jìn)行其他擴(kuò)展,就要傷筋動(dòng)骨,不符合低耦合的理念,因此不考慮在組件內(nèi)部注入相關(guān)接口依賴。

解決辦法

既然不打算將接口依賴放到組件中,那么就只有暴露出來給父級(jí)組件,在某些時(shí)間的時(shí)候,調(diào)用某些接口,執(zhí)行某些方法。

部分代碼如下:

<div class="AS-upload">
  <div class="uploaded-list" v-if="uploadFileNameList.length > 0">
    【已上傳文件】<span class="file-name" v-for="(name,index) in uploadFileNameList" :key="index">{{ name }}</span>
  </div>
  <div class="upload-header">
    <div class="action-buttons">
      <el-upload
        ref="upload"
        class="upload-demo"
        :action="uploadUrl"
        :headers="headers"
        :data="uploadParams"
        :on-remove="handleRemove"
        :before-remove="beforeRemove"
        :before-upload="beforeUpload"
        :on-change="handleChange"
        :on-success="handleSuccess"
        :on-error="handleError"
        :file-list="fileList"
        :limit="1"
        accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel"
        :auto-upload="false"
      >
        <el-button slot="trigger" size="mini" type="primary">選擇表單</el-button>
        <el-button size="mini" type="success" @click="uploadClick">上傳</el-button>
      </el-upload>
    </div>
    <div class="tools-buttons">
      <ASTemplateDownload :path="templatePath" :export-name="exportName"></ASTemplateDownload>
    </div>
  </div>
  <div class="upload-footer">
    <el-button size="mini" type="primary" @click="submitBatchAdd">提交</el-button>
    <el-button size="mini" type="default" @click="uploadClose">取消</el-button>
  </div>
</div>

js只拿一個(gè)方法進(jìn)行舉例 uploadClick()上傳按鈕點(diǎn)擊,此處的判斷this.isVerify是用于父級(jí)條件校驗(yàn)的,后面會(huì)說到,現(xiàn)在先不展開。

//點(diǎn)擊上傳
uploadClick() {
  `是否需要校驗(yàn):${this.isVerify ? '需要' : '不需要'}`
  if (this.isVerify) {
    this.$emit('upload-click', null);
    return false;
  }
  this.uploadHandler();
},
//上傳處理函數(shù)
uploadHandler() {
  //前置判斷:1、必須已選擇文件
  if (this.fileList.length === 0 && this.uploadedIds.length === 0) {
    this.$message.error('請(qǐng)先選擇要上傳的Excel文件');
    return false;
  }
  //判斷是否已經(jīng)上傳過文件,已上傳的話,調(diào)用取消接口,將對(duì)應(yīng)需求單id請(qǐng)求取消接口,清空后端臨時(shí)數(shù)據(jù),清空完成后,清空已上傳文件名、id,同時(shí)開始觸發(fā)文件上傳邏輯
  if (this.uploadedIds.length !== 0) {
    //拋出上傳取消事件
    this.$emit('upload-cancel', this.uploadedIds[0]);
  }
  if (this.fileList.length !== 0) {
    this.uploadLoading = this.$message({
      message: '文件上傳中,請(qǐng)稍后...',
      showClose: true,
      iconClass: 'el-icon-loading',
      duration: 0
    })
    this.$refs.upload.submit();
  } else {
    this.$message.error('請(qǐng)先選擇一個(gè)文件');
  }
},

可以看到,在執(zhí)行某些操作的時(shí)候,都在公共組件中,利用$emit將事件拋出,然后在父組件進(jìn)行事件監(jiān)聽:this.$emit('upload-click', null);

父組件html部分,通過監(jiān)聽事件@upload-click,并在js中寫一個(gè)方法進(jìn)行接收

<!--          父級(jí)組件調(diào)用組件-->
<ASUpload ref="ASUpload"
          is-verify
          :upload-url="uploadUrl"
          :upload-params="uploadParams"
          template-path="/static/template/xxx.xlsx"
          export-name="xxx.xlsx"
          @close="uploadClose"
          @upload-click="uploadClick"
          @upload-error="uploadError"
          @upload-cancel="uploadCancel"
          @upload-submit="uploadSubmit"
></ASUpload>

父組件js部分

//上傳前校驗(yàn)
uploadClick(){
  if( !this.uploadVerify()) return false;
  //調(diào)用接口等其他業(yè)務(wù)邏輯
  //...
  //校驗(yàn)完成后,手動(dòng)調(diào)用上傳
  this.$refs.ASUpload.uploadHandler();
},

以上,就將接口依賴,從公共組件中解耦出來了。

子組件校驗(yàn)父組件條件

上面的代碼有用到一個(gè)isVerify字段,這個(gè)字段是用于判斷是否需要進(jìn)行校驗(yàn)的標(biāo)識(shí)。 以上傳操作為例子,點(diǎn)擊之后,判斷該字段,如不需要校驗(yàn),則直接執(zhí)行默認(rèn)上傳方法

/** props*/
props:{
    //是否需要校驗(yàn),校驗(yàn)通過后才傳入允許上傳,傳入true,則需要手動(dòng)調(diào)用組件內(nèi)部的上傳方法
    isVerify: {
      type: Boolean,
      default: false,
    },
}
/** methods */
//點(diǎn)擊上傳
uploadClick() {
  `是否需要校驗(yàn):${this.isVerify ? '需要' : '不需要'}`
  if (this.isVerify) {
    this.$emit('upload-click', null);
    return false;
  }
  this.uploadHandler();
},

將上傳邏輯根據(jù)判斷進(jìn)行分流,當(dāng)組件外的父級(jí)需要做某些判斷的時(shí)候,此處上傳需要額外校驗(yàn)其他參數(shù)不能為空,在父級(jí)執(zhí)行完校驗(yàn)之后,在通過$refs手動(dòng)調(diào)用公共組件中的uploadHandler方法。

總結(jié)

至此,基本解決了公共組件和父組件之間的依賴耦合問題和公共組件調(diào)用父組件校驗(yàn)的問題。 以上為本人拙見,記錄一次bug解決的過程,希望給有需要的人帶去一點(diǎn)思路。只要思想不滑坡,辦法總比問題多~

以上就是公共組件父子依賴調(diào)用及子校驗(yàn)父條件問題解決的詳細(xì)內(nèi)容,更多關(guān)于公共組件父子依賴調(diào)用校驗(yàn)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue之?dāng)?shù)據(jù)交互實(shí)例代碼

    vue之?dāng)?shù)據(jù)交互實(shí)例代碼

    本篇文章主要介紹了vue之?dāng)?shù)據(jù)交互實(shí)例代碼,vue中也存在像ajax和jsonp的數(shù)據(jù)交互,實(shí)現(xiàn)向服務(wù)器獲取數(shù)據(jù),有興趣的可以了解一下
    2017-06-06
  • 如何構(gòu)建 vue-ssr 項(xiàng)目的方法步驟

    如何構(gòu)建 vue-ssr 項(xiàng)目的方法步驟

    這篇文章主要介紹了如何構(gòu)建 vue-ssr 項(xiàng)目的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Vue SPA 初次進(jìn)入加載動(dòng)畫實(shí)現(xiàn)代碼

    Vue SPA 初次進(jìn)入加載動(dòng)畫實(shí)現(xiàn)代碼

    今天小編就為大家分享一篇Vue SPA 初次進(jìn)入加載動(dòng)畫實(shí)現(xiàn)代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Element輸入框帶歷史查詢記錄的實(shí)現(xiàn)示例

    Element輸入框帶歷史查詢記錄的實(shí)現(xiàn)示例

    這篇文章主要介紹了Element輸入框帶歷史查詢記錄的實(shí)現(xiàn)示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • vue中vue-cli項(xiàng)目報(bào)錯(cuò)sockjs.js報(bào)錯(cuò)問題

    vue中vue-cli項(xiàng)目報(bào)錯(cuò)sockjs.js報(bào)錯(cuò)問題

    這篇文章主要介紹了vue中vue-cli項(xiàng)目報(bào)錯(cuò)sockjs.js報(bào)錯(cuò)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2022-12-12
  • 使用vite構(gòu)建vue3項(xiàng)目的實(shí)現(xiàn)步驟

    使用vite構(gòu)建vue3項(xiàng)目的實(shí)現(xiàn)步驟

    通過本文,您可以了解如何使用Vue CLI創(chuàng)建Vue 3項(xiàng)目,配置Vite,利用其優(yōu)勢(shì)進(jìn)行開發(fā),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • vue使用video插件vue-video-player詳解

    vue使用video插件vue-video-player詳解

    這篇文章主要為大家詳細(xì)介紹了vue使用video插件vue-video-player,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • vue3使用elementPlus進(jìn)行table合并處理的示例詳解

    vue3使用elementPlus進(jìn)行table合并處理的示例詳解

    虛擬數(shù)據(jù)中公司下有多個(gè)客戶,公司一樣的客戶,公司列需要合并,客戶如果一樣也需要合并進(jìn)行展示,所以本文給大家介紹了vue3使用elementPlus進(jìn)行table合并處理的實(shí)例,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • vue實(shí)現(xiàn)吸壁懸浮球

    vue實(shí)現(xiàn)吸壁懸浮球

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)吸壁懸浮球,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 關(guān)于Vue中axios的封裝實(shí)例詳解

    關(guān)于Vue中axios的封裝實(shí)例詳解

    這篇文章主要給大家介紹了關(guān)于Vue中axios的封裝的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10

最新評(píng)論