環境搭建步驟:css
在Vue2.0子父組件通訊這篇文章聊到過不管是父向子傳值仍是子向父傳值,都須要一箇中間介質。對於平級組件來講其實也同樣,他們也須要一箇中間介質來做爲一個中央事件總線,咱們瞭解到這個以後就開始來寫個Demo吧。前端
咱們在git上運行 npm run dev 的命令後,瀏覽器中會打開一個vue基於webpack構建工具的一個模板項目,接着咱們在編輯器中進入Demo,咱們能夠刪除掉模板項目中src/components/Hello.vue,而後在App.vue中刪除對於Hello子組件的註冊和使用還有一些其餘可有可無的東西,此時的App.vue應爲這樣vue
eventBus中咱們只建立了一個新的Vue實例,之後它就承擔起了組件之間通訊的橋樑了,也就是中央事件總線。node
咱們在響應點擊事件的sendMsg函數中用$emit觸發了一個自定義的userDefinedEvent事件,並傳遞了一個字符串參數
PS:$emit實例方法觸發當前實例(這裏的當前實例就是bus)上的事件,附加參數都會傳給監聽器回調。jquery
咱們在mounted中,監聽了userDefinedEvent,並把傳遞過來的字符串參數傳遞給了$on監聽器的回調函數
PS:
mounted:是一個Vue生命週期中的鉤子函數,簡單點說就相似於jquery的ready,Vue會在文檔加載完畢後調用mounted函數。
$on:監聽當前實例上的自定義事件(此處當前實例爲bus)。事件能夠由$emit觸發,回調函數會接收全部傳入事件觸發函數($emit)的額外參數。webpack
** 題外話:**
1.看過筆者上一篇Vue2.0子父組件通訊這篇文章的同窗能夠感受到,組件以前的通訊其實和子組件向父組件傳值有些相似,其實他們的通訊原理都是相同的,例如子向父傳值也是$emit和$on的形式,只是沒有eventBus,但若咱們仔細想一想,此時父組件其實就充當了bus這個事件總線的角色。
2.這種用一個Vue實例來做爲中央事件總線來管理組件通訊的方法只適用於通訊需求簡單一點的項目,對於更復雜的狀況,Vue也有提供更復雜的狀態管理模式Vuex來進行處理git
做者:PengL連接:http://www.jianshu.com/p/d946bd7c26f4來源:簡書著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。