发布订阅事件机制模块
用 Typescript 函数式编程写成
添加事件监听器有自动去重功能
事件触发时,监听器函数异步执行
yarn add https://github.com/masx200/event-emitter-target.git
import EventEmitterTargetClass from "@masx200/event-emitter-target";
创建 EventEmitterTarget
对象,有两种方法
1.当做函数使用
let emitter = EventEmitterTargetClass();
2.当做类使用
class myemitter extends EventEmitterTargetClass {}
let emitter = new myemitter();
3.以下示例显示了EventEmitterTarget
具有单个侦听器的简单实例。
该EventEmitterTarget.on()
方法用于注册侦听器,
而该EventEmitterTarget.emit()
方法用于触发事件。
emitter.on("event", () => {
console.log("an event occurred!");
});
emitter.emit("event");
4.使用参数sync
创建同步的EventEmitterTarget
let emitter = EventEmitterTargetClass({ sync: true });
如果参数sync
为true
,则在触发事件时,使用同步的方式调用侦听器.
如果参数sync
为false
,则在触发事件时,使用异步的方式调用侦听器.
typescript 类型声明文件
https://github.com/masx200/event-emitter-target/blob/master/src/index.ts
1.可当做函数使用
2.可当做类使用
返回一个EventEmitterTarget
对象
此属性值为 "EventEmitterTarget"
,
可以用来判断对象类型。
返回所有的事件名和监听器的数组迭代器
别名 emitter[Symbol.iterator]()
返回侦听名为eventName
的事件的侦听器数
别名 emitter.removeAllListeners(eventName)
删除指定eventName
的所有侦听器。
删除代码中其他地方添加的侦听器是一种不好的做法,尤其是在EventEmitterTarget
实例由其他组件或模块创建时。
将监听器函数添加到名为eventName
的事件的监听器数组的末尾。检查是否已添加侦听器。通过eventName
和listener
的相同组合进行的多次调用不会导致多次添加和调用该监听器。
别名 emitter.on(eventName, listener)
别名 emitter.removeListener(eventName, listener)
.
从名为eventName
的事件的侦听器数组中删除指定的侦听器。
removeListener()
将最多从侦听器数组中删除一个侦听器实例。如果已将任何单个侦听器多次添加到指定eventName
的侦听器数组,则removeListener()
无需多次调用即可删除每个实例。
为名为eventName
的事件添加一次性侦听器函数。下次eventName
触发时,将删除此侦听器,然后调用它。
以注册事件eventName
的顺序异步调用为名为的事件注册的每个侦听器,并将提供的参数传递给每个侦听器。
别名 emitter.emit(eventName, args)
返回一个数组,该数组列出发射器已为其注册侦听器的事件。数组中的值将是string
或symbol
。
返回名为eventName
的事件的侦听器数组的副本。