vue Bus总线

Posted FAN

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue Bus总线相关的知识,希望对你有一定的参考价值。

有时候两个组件也需要通信(非父子关系)。当然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总线的主要内容,如果未能解决你的问题,请参考以下文章

vue Bus总线

Vue中事件总线$bus的用法及$on$off和$emit的使用

Vue中事件总线$bus的用法及$on$off和$emit的使用

Vue非父子组件传值(Bus/总线/发布订阅模式/观察者模式)

vue创建事件总线和销毁事件总线监听$on$offEventBus

Vue事件车,非父子组件通讯$bus,$event,中央事件总线