全局事件总线:可以实现任意组件间的通信
安装全局事件总线:
beforeCreat(){vue.Prototype.$bus=this}bus是当前应用的VM
- 数据总线:
- 接收数据代码为
methods(){demo(data){}}
mounted(){this.$bus.$on("hello",this.data)}A组件给$bus绑定事件,事件的回调会在A组件本身 - 提供数据代码为
this.$bus.$emit("hello",data)-最后在beforeDistroy钩子中,用$off去解绑当前组件所用到的事件
消息订阅与发布
- 订阅消息:消息名 接受数据 发布消息:消息内容 提供数据
- 原生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去取消订阅