鍍金池/ 問(wèn)答/HTML/ 如何解決vue個(gè)組件之間的數(shù)據(jù)依賴(lài)問(wèn)題?

如何解決vue個(gè)組件之間的數(shù)據(jù)依賴(lài)問(wèn)題?

問(wèn)題描述:
A組件中接口返回的有登錄信息,在B組件中需要根據(jù)這個(gè)登陸信息去進(jìn)行其他的操作

我現(xiàn)在的做法是把A組件中的登錄信息存在一個(gè)全局的變量中,然后在B組件mounted中通過(guò)getList函數(shù)去獲取這個(gè)全局變量。

現(xiàn)在有個(gè)問(wèn)題就是,在B組件渲染完成之后A組件中的接口還沒(méi)有請(qǐng)求成功,這時(shí)候就取不到返回的登錄信息,等A組件接口請(qǐng)求成功并將值賦值給全局變量后,B組件不會(huì)再去執(zhí)行g(shù)etList這個(gè)方法所以視圖還是沒(méi)法渲染。

我自己想到一個(gè)解決辦法就是給B組件中的getList方法加一個(gè)定時(shí)器延遲執(zhí)行,也可以達(dá)到預(yù)期的效果,但總是感覺(jué)做法不是很合適,在這里請(qǐng)教一下大佬們有沒(méi)有什么好的解決辦法?

說(shuō)明
1.項(xiàng)目沒(méi)有用到vuex
2.之前用到過(guò)eventbus進(jìn)行組件通信,但是因?yàn)锽組件是一個(gè)公用組件,多個(gè)不同的路由會(huì)跳到這個(gè)組件,當(dāng)路由切換的時(shí)候數(shù)據(jù)更新不上,所有最后用的就是定義全局變量的方式來(lái)傳值

回答
編輯回答
蔚藍(lán)色

其實(shí)這種情況用vuex挺好的,可以完美解決你的需求,用上也不復(fù)雜
store中定義模塊
用的時(shí)候

import { mapGetters } from 'vuex'
computed: {
  ...mapGetters([
    'name'
  ])
}

<div>{{name}}</div>
2017年5月25日 16:54
編輯回答
毀了心

如果A組件是B組件的子組件,用emit處理。
如果是同級(jí)的組件,從A組件跳轉(zhuǎn)到B組件,為什么不等登錄成功之后跳轉(zhuǎn)呢?
如果沒(méi)有頁(yè)面跳轉(zhuǎn),可考慮做一個(gè)自定義事件,或者用vuex

2017年11月14日 04:05
編輯回答
執(zhí)念

這種等有數(shù)據(jù)后,觸發(fā)另一個(gè)組件的方法,是eventBus去做的。
在B組件里bus.$on監(jiān)聽(tīng),在A組件里bus.$emit觸發(fā)事件。

2017年1月12日 12:06