2 回答

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個(gè)贊
如果只是想兄弟組件通信的話, 可以不使用vuex, 通過(guò)一個(gè)全局的事件機(jī)制就行了
可以這樣做var eventBus = new Vue()
然后在兄弟組件里面引用這個(gè)Vue 實(shí)例, 通過(guò)$on 和 $emit 就可以了

TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
實(shí)際上vue1.X里面是有類(lèi)似方法的,$dispatch
和 $broadcast
,就是和總線相同的用法。
但是在vue2.X被移除了,原因是事件流會(huì)因此變得脆弱而難以理解,Bus
實(shí)際是broadcast的升級(jí)版:
通過(guò)使用事件中心,允許組件自由交流,無(wú)論組件處于組件樹(shù)的哪一層。由于 Vue 實(shí)例實(shí)現(xiàn)了一個(gè)事件分發(fā)接口,你可以通過(guò)實(shí)例化一個(gè)空的 Vue 實(shí)例來(lái)實(shí)現(xiàn)這個(gè)目的。
如果要改寫(xiě)成VUEX,推薦的做法是把所有數(shù)據(jù),和相關(guān)方法全部置入store,所有子組件只需要發(fā)送mutation調(diào)取store中的方法和數(shù)據(jù),雖然看起來(lái)這種做法會(huì)讓store顯得過(guò)于臃腫龐大,但是對(duì)于復(fù)雜系統(tǒng)的構(gòu)建是更具優(yōu)勢(shì)的。而且官方也提供了將store切分的解決方案。
添加回答
舉報(bào)