1. 程式人生 > >vue Bus總線

vue Bus總線

clas tails blog world! logs 實例 button 參考 tail

有時候兩個組件也需要通信(非父子關系)。當然Vue2.0提供了Vuex,但在簡單的場景下,可以使用一個空的Vue實例作為中央事件總線。

參考:http://blog.csdn.net/u013034014/article/details/54574989?locationNum=2&fps=1

例子:https://segmentfault.com/q/1010000007491994

<div id="app">
    <c1></c1>
    <c2></c2>
</div>
var Bus = new Vue(); //為了方便將Bus(空vue)定義在一個組件中,在實際的運用中一般會新建一Bus.js
Vue.component(‘c1‘,{ //這裏已全局組件為例,同樣,單文件組件和局部組件也同樣適用 template:‘<div>{{msg}}</div>‘, data: () => ({ msg: ‘Hello World!‘ }), created() { Bus.$on(‘setMsg‘, content => { this.msg = content; }); } }); Vue.component(‘c2‘,{ template: ‘<button @click="sendEvent">Say Hi</button>‘, methods: { sendEvent() { Bus.$emit(
‘setMsg‘, ‘Hi Vue!‘); } } }); var app= new Vue({ el:‘#app‘ })

在實際運用中,一般將Bus抽離出來:

Bus.js

import Vue from ‘vue‘
const Bus = new Vue()
export default Bus

組件調用時先引入

組件1

import Bus from ‘./Bus‘

export default {
    data() {
        return {
            .........
            }
      },
  methods: {
        ....
        Bus.$emit(
‘log‘, 120) }, }

組件2

import Bus from ‘./Bus‘

export default {
    data() {
        return {
            .........
            }
      },
  methods: {
        ....
   Bus.$on(‘log‘, content => { 
      console.log(content)
});
 }, 
}

vue Bus總線