第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

組件更新亂序 Vue

組件更新亂序 Vue

炎炎設(shè)計 2022-10-27 16:46:41
這是我使用 Bootstrap、Vue 和 Axios 的以下代碼:設(shè)置:*忽略component_a中的標(biāo)簽內(nèi)容main.html  <div v-if="activeDisplay === 'ep'">    <component_b @set-active-display="setActiveDisplay" :info="info"></component_b>  </div>  <div v-else-if="activeDisplay === 'dashboard'">    <dashboard></dashboard>  </div>  <div v-else-if="activeDisplay === 'activeEp'">    <component_a :info="info"></component_a>  </div>  <div v-else>    <dashboard></dashboard>  </div>問題:單擊表中 B 中的鏈接后,它正確調(diào)用了setActiveDisplay方法和getAPIData。但是,在getAPIData(即 Axios GET 調(diào)用)運行后,info(根實例)不會更新為在 B 中的表中單擊的單個項目,我從登錄到控制臺中知道這一點。info(根實例)包含表中的所有對象。(組件 B 是打開網(wǎng)頁時首先顯示的組件)然后,網(wǎng)頁更改(正確)以顯示組件 A(由于activeDisplay設(shè)置變量并顯示正確的組件),但我可以看到與表中項目數(shù)相同的選項卡數(shù)。我一瞬間就看到了這一點。然后,組件 A 會更新以顯示最初單擊的正確選項卡。我確定這是一個操作順序問題(因為我是 Vue 的新手),但似乎無法弄清楚為什么info(根實例)對象在運行時未設(shè)置為單個項目。我已經(jīng)在瀏覽器中運行了調(diào)試器,并且getAPIData從未被第二次調(diào)用。getAPIData正在獲取正確的數(shù)據(jù),但就像 Vue 持有從修改信息到渲染組件 A 的getAPIData調(diào)用的結(jié)果(即使我在單擊組件 B 中的鏈接后要求它更新)操作順序在根信息中使用多個對象在表中渲染 B => 用戶單擊表中的鏈接 => 在 B 中調(diào)用 setActiveDisplay => 在根中發(fā)出事件調(diào)用 setActiveDisplay => 在根中調(diào)用 setActiveDisplay 的 getAPIData (直到此處正確工作) =>應(yīng)該更新根info對象到單個項目=> 由于根info對象(并且由于傳遞給 A 的道具)包含一個來自getAPIData調(diào)用的對象,因此使用一個選項卡呈現(xiàn) A編輯1:經(jīng)過更多調(diào)試,我看到在 vue.js開始處理點擊后,使用正確的 API url 調(diào)用了axios.js 的dispatchRequest 。. . .所以,這個方法完成后,getAPIData 中的this.info = response.data中沒有數(shù)據(jù)。這是我從調(diào)試中發(fā)現(xiàn)的流程細(xì)分:運行 getAPIData 完成(導(dǎo)致根實例的 info 對象未定義 => vue.js 處理組件 B 中表中項目的單擊事件 => axios.js 正在使用完整 URL 調(diào)用 dispactRequest 事件 => more vue. js 處理 => 從 getAPIData 函數(shù)接收響應(yīng)并將信息(根)對象設(shè)置為響應(yīng)所以我看到在顯示我需要的數(shù)據(jù)之前,我需要等待 Axios 調(diào)用完成?,F(xiàn)在的問題是,我如何在 Vue 中做到這一點?謝謝你。
查看完整描述

1 回答

?
慕尼黑8549860

TA貢獻(xiàn)1818條經(jīng)驗 獲得超11個贊

所以我看到在顯示我需要的數(shù)據(jù)之前,我需要等待 Axios 調(diào)用完成。現(xiàn)在的問題是,我如何在 Vue 中做到這一點?

我假設(shè)您需要在設(shè)置之前等待axios.get()調(diào)用getApiData()完成this.activeDisplay。為此,首先返回axios.get()(ie, a Promise) 的結(jié)果,以便調(diào)用者可以await得到它。


getAPIData(id,type) {

  // BEFORE:

  //axios.get(...)


  // AFTER:

  return axios.get(...)

}

然后制作setActiveDisplay()一個async函數(shù),允許編輯的getApiData()結(jié)果await


// BEFORE:

//setActiveDisplay: function (id, ad) { 


// AFTER:

async setActiveDisplay(id, ad) {

  if (...) {

    await this.getApiData(...)

  }

  this.activeDisplay = ad

}

或者,您可以不使用async/await并使用Promise.prototype.then()


setActiveDisplay: function (id, ad) {

  if (...) {

    this.getApiData(...).then(() => this.activeDisplay = ad)

  }

}


查看完整回答
反對 回復(fù) 2022-10-27
  • 1 回答
  • 0 關(guān)注
  • 110 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號