鍍金池/ 問答/HTML/ vue只能在父組件中訪問后臺獲取所有內(nèi)容,然后傳給組件,子組件直接顯示,不能只傳

vue只能在父組件中訪問后臺獲取所有內(nèi)容,然后傳給組件,子組件直接顯示,不能只傳id,然后子組件根據(jù)id獲取內(nèi)容嗎?

問題解決了,解決方式是在data里面多聲明一個屬性,然后再computed的get的axios里面對這個變量進行賦值,get返回這個屬性

如果我在子組件的created方法里面,根據(jù)id去后臺查詢詳情,可以正常顯示,不報錯,但是當父組件id值改變后,并不會再次去后臺查詢了,

,假如我后臺返回的對象時detail,如果寫在computed里面寫
detail: {

get() {
  let detail
  const gameId = this.id
  querySingleGameDetail(gameId).then(response => {
    detail= response.data.data.detail//我們的結(jié)構(gòu)就是這樣的
  })
  return detail
}

}
,頁面就無法正常顯示,
比如在某標簽使用了 {{detail.content}},js就會報錯

Error in render: "TypeError: Cannot read property 'content' of undefined",

所以我現(xiàn)在就是在父組件獲取詳情,直接把詳情傳入給子組件,但是我覺得這么做不優(yōu)雅,所以想咨詢下各位,有沒有更好地解決辦法

回答
編輯回答
青瓷

你這個是promise概念和js執(zhí)行機制沒理解,兄弟,

 querySingleGameDetail(gameId).then(response => {
    detail= response.data.data.detail//
  })

這個detail只有promise執(zhí)行完成了才有值,但是return detail在promise執(zhí)行之前就返回了detail=undefined

2018年2月20日 19:32
編輯回答
六扇門

兄弟啊,你這個computed 里面只定義了get方法,沒有執(zhí)行啊
clipboard.png

你是模仿這個寫法對把?

clipboard.png

還是建議用watch,不必太糾結(jié)。

2018年7月29日 17:37
編輯回答
傲嬌范

回復 coder94:
get是會執(zhí)行的,但是還是用watch吧,computed并不能很好的處理異步數(shù)據(jù)

— toBeTheLight · 4 小時前
回復 toBeTheLight:
好的,謝謝哈,那我就得到答案了就是 computed并不能處理異步數(shù)據(jù)

— coder94 · 4 小時前

回復 coder94:
你這個場景不適合promise,他的鏈式調(diào)用返回值一直是promise對象,你改成同步方法,獲取你的detail就可以了,這里也不好使用async/await,也是返回的promise對象
promise只有在第一層的能與外面同步執(zhí)行,其余的均是加入任務隊列,異步進行執(zhí)行,建議你了解一下js eventLoop機制

— 懶懶的技術宅 · 3 小時前

https://segmentfault.com/q/10...

2018年6月29日 23:22