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的用法及$on$off和$emit的使用
Vue中事件总线$bus的用法及$on$off和$emit的使用
Vue非父子组件传值(Bus/总线/发布订阅模式/观察者模式)