全局事件总线
作用:用于任意组件间的通信(传递数据)
首先创建出一个所有组件都能看到的bus
在new Vue时 利用生命周期函数 beforCreate给Vue的原型上添加一个全局事件总线
例子:
new Vue({
beforeCreate(){
vue.prototype.<全局事件总线名> = this(this指向vm)
}
})
在想要接受数据的组件上,绑定自定义事件,事件的回调留在A组件自身
methods(){
回调函数(){
}
},
mounted(){
this.<全局事件总线名>.$on('自定义事件名',调用回调函数)
}
在提供数据的组件通过:this.<全局事件总线>.$emit('事件名',数据)提供数据
!!最好在beforeDestroy生命周期中 使用$off去解绑使用的自定义事件
消息订阅与发布
原生js里面没有办法轻松的实现订阅与发布
所以在vue里面一般借助第三方库来实现这个功能
订阅:(需要收到数据的组件)提供一个联系方式
发布:(发送数据的组件) 带着数据
库有很多 下面例子用的是 pubsub-js库做例子
首先在终端 npm i pubsub-js 安装pubsub-js库
那个组件需要订阅消息就在那个组件里面引入
引入:import pubsub from 'pubsub-js'
在引入的组件当中的mounted挂载生命周期函数里面订阅消息
mounted(){
subscribe 是引入的pubsub-js中的API 订阅消息时使用(第一个参数为消息名-联系方式,第二个参数是回调函数使用带回来的数据)
this.pubid = pubsub.subscribe('消息名',回调函数(第一个形参是联系方式,第二个形参为数据))
}
发布数据的组件也需要引入pubsub-js库
例子:
methods(){
函数名(){
pubsub.publish('订阅消息给的联系方式',传递过去的数据)
}
}
当然别忘了取消订阅
beforeDestroy(){
pub.unsubscribe(this.pubid)
}