背景
在前端开发中,我们经常需要实现事件的发布与订阅,这时候我们可以选择使用 eventEmitter 来实现。但是如果我们需要在多个域名间共享事件,该怎么办呢?这时候就需要使用 npm 包 emitter-domain
来实现了。
安装
在项目中安装 emitter-domain
:
--- ------- -------------- ------
然后在代码中引入:
----- ------------- - --------------------------
使用
创建 EmitterDomain
使用 EmitterDomain
基础类来创建一个 emitterDomain
实例:
----- ------------- - --- ----------------
域名映射
使用 setDomainMap(domainMap)
方法设置域名映射,使不同域名的 emitter
可以被识别。
----- --------- - - ---------------------- --------- ---------------------- -------- -- --------------------------------------
发布事件
使用 emitterDomain.emit(domain, eventName, arg1, arg2, ...)
方法发布一个事件:
----------------------------------------- ----------- ------- --------
订阅事件
使用 emitterDomain.on(domain, eventName, listener)
方法订阅一个事件:
--------------------------------------- ----------- ------------------
取消订阅
使用 emitterDomain.offAll(domain, eventName)
方法取消某个域名下的所有事件的订阅:
------------------------------------------- ------------
示例
----- ------------- - -------------------------- -- ---- ------- -- ----- -------- - --- ---------- ----- -------- - --- ---------- -- ---- ----- --------- - - ---------------------- --------- ---------------------- -------- -- -- -- ------------- -- ----- ------------- - --- ---------------- -------------------------------------- -- --- ------------------- ----- ----------------------------------------- ----------- ------- -------- -- --- ------------------- ----- --------------------------------------- ----------- ------ ----- -- - ----------------- ------ -- -- ----- ----- --- -- --- ------------------- ----- ----------------------------------------- ---------------- ------- -------- -- --- ------------------- ------ ------------------- ------ --------------------------------------- ----------- ------ ----- -- - ----------------- ------ -- ------- ------------------- ----- ------------------- ---- -------- -- --- -- ----- ------------------- -- -------- ---- ------------------------------------------- ------------
总结
使用 emitter-domain
可以很方便地在不同域名下共享事件,同时也能够解决多个域名下相同事件名称的冲突问题。但是需要注意,不同域名下的 emitter 实例需要在对应的 domainMap
中进行映射,否则 emit
和 on
方法会无法识别 emitter 实例。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/60066e1ba563576b7b1ecc30