上一篇講了父子組件的通訊,那麼非父子組件間如何通訊呢?在vue.js 2.x中,用一個空的Vue實例做爲中央事件總線與兩個跨級組件進行通訊,在通訊的過程當中兩個跨級組件互不聯繫。vue
前面大概介紹了中央事件總線的過程,具體如何進行看個栗子。bash
<body>
<div id="app">
{{ message }}
<component-a></component-a>
</div>
<script>
var bus = new Vue();
Vue.component('component-a',{
template: '<button @click="handleEvent">傳遞-事件</button>',
methods: {
handleEvent:function () {
bus.$emit('on-message','來自組件commponent-a的內容');
}
}
});
var app = new Vue({
el: '#app',
data: {
message: ''
},
mounted: function (){
var _this = this;
//在實例初始化時,監聽來自bus實例的事件
bus.$on('on-message',function (msg) {
_this.message = msg;
}) ;
}
})
</script>
</body>
複製代碼
結果如圖所示:app
2.關於mounted這個鉤子,咱們知道el掛載到實例後調用,通常業務邏輯會從這裏開始。函數
3.當el掛載app後,在mounted的函數裏面監聽來自bus的on-message事件,因此當on-message事件傳到bus實例上後,就會執行匿名函數function,給app中data裏的message賦值。 (msg){}。頁面中再經過插值表達式將數據message顯示出來。this
在vue.js 2.x中,用一個空的Vue實例bus做爲中央事件總線,bus實例也能夠擴展,好比添加methods,data,computed等選項。固然還有經過父鏈和子組件索引也能夠實現組件間的通訊。spa