全局事件总线GlobalEventBus和消息订阅与发布

110 阅读1分钟

全局事件总线:可以实现任意组件间的通信

安装全局事件总线: beforeCreat(){vue.Prototype.$bus=this}bus是当前应用的VM

  1. 数据总线:
  • 接收数据代码为methods(){demo(data){}}
    mounted(){this.$bus.$on("hello",this.data)}A组件给$bus绑定事件,事件的回调会在A组件本身
  • 提供数据代码为this.$bus.$emit("hello",data) -最后在beforeDistroy钩子中,用$off去解绑当前组件所用到的事件

消息订阅与发布

  1. 订阅消息:消息名 接受数据 发布消息:消息内容 提供数据
  2. 原生JS无法轻松实现订阅与发布,需借助第三方库pubsub-js(publish发布 subscribe订阅)可在任意一种框架中使用,安装npm i pubsub-js
  • 接收数据的A组件引入import pubsub from "pubsub-js",订阅消息mounted(){this.pubid=pubsub.subscribe("hello",(massageName,data)=>{console.log(有人调用,回调执行看,massageName,data) })}
  • 提供数据的B组件引入import pubsub from "pubsub-js",发布消息methods:{绑定的名字(){pubsub.publish("hello",数据)} 组件被销毁前进行beforeDistroy(){pubsub.unsubscribe(this.pubid)}需要通过id去取消订阅