eventing-bus详解
Posted zlzbt
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了eventing-bus详解相关的知识,希望对你有一定的参考价值。
事件总线 eventing-bus
安装
1.Node.js
npm install --save eventing-bus
2.Webpack:
yarn add eventing-bus
3.NPM
npm install --save eventing-bus
订阅事件
import EventBus from 'eventing-bus'
const callback = (name) => console.log(`Hello, $name!`) ;
EventBus.on("exampleEventName", callback);
发布事件
import EventBus from 'eventing-bus';
EventBus.publish("exampleEventName", "Watson");
/* After registering the subscription and publishing an event you should see
"Hello, Watson!" printed in your console. */
多个事件总线
默认情况下,您只有一个单例事件总线实例,其中包含应用程序所有部分的订阅。但是在创建自己的私有实例的过程中没有任何阻碍(例如,对于复杂应用程序的每个逻辑上不同的部分)
import EventStream from 'eventing-bus/lib/event_stream';
/* You can use EventStream both as a constructor and as a factory function. */
const privateBus = EventStream();
const newPrivateBus = new EventStream();
这些流通过创建不会分享任何订阅,也不事件
注销事件处理程序
如果您需要注销注册(一种典型的情况是在清理UI库之后进行的注册),则可以通过以下两种方式进行:
传回的通话价值 #on
注册事件处理程序后,返回提示将是注销特定处理程序的函数
import EventBus from 'eventing-bus';
const subscription = EventBus.on('event', () => console.log('test') )
EventBus.publish('event') // Console: 'test'
// This will unregister this (and only this) subscription.
subscription();
EventBus.publish('event') // No output in console
用 #unregisterCallback
如果您无法轻松获取返回的值#on,则可以致电#unregisterCallback。另一个好处是该功能不需要知道事件名称。通过这种方式,您可以取消注册suck回调的每一次用法
import EventBus from 'eventing-bus';
const callback = () => console.log('test')
EventBus.on('eventA', callback)
EventBus.on('eventB', callback)
EventBus.publish('eventA') // Console: 'test'
EventBus.publish('eventB') // Console: 'test'
EventBus.unregisterCallback(callback)
EventBus.publish('eventA') // No output in console
EventBus.publish('eventB') // No output in console
批量注销订阅
由于默认情况下EventBus是总线的单例实例,因此有时可能需要注销所有订阅(最值得注意的是-在测试过程中)。可以通过调用以下方法来完成:
#unregisterAllCallbacks
删除所有事件处理程序。
import EventBus from 'eventing-bus';
EventBus.unregisterAllCallbacks();
#unregisterCallbacksForEvent
删除特定事件的所有事件处理程序
import EventBus from 'eventing-bus';
EventBus.on('exampleEvent', () => console.log("EXAMPLE") );
EventBus.publish("exampleEvent"); // Logs `EXAMPLE`
EventBus.unregisterCallbacksForEvent('exampleEvent');
EventBus.publish("exampleEvent"); // Empty output
详细参考地址:参考文档
以上是关于eventing-bus详解的主要内容,如果未能解决你的问题,请参考以下文章
搜索引擎系列六:Lucene搜索详解(Lucene搜索流程详解搜索核心API详解基本查询详解QueryParser详解)