什么是 emity
emity 是一个轻量级的 EventEmitter 库,它用于 Node.js 和浏览器 JavaScript 应用程序中提供事件发布/订阅模式的实现。emity 适用于需要模块化和具有高度自定义功能和性能要求的代码库。
安装 emity
使用 npm 安装 emity:
--- ------- ----- ------
在 Node.js 中使用 emity
首选,我们需要在代码中引入 emity:
----- ----- - -----------------
创建实例
emity 中的事件实例可以通过 new 来创建。您可以选择不使用选项或将其传递给它:
----- ----- - --- -------- -- -- ----- ---------------- - --- ------- ---------- ---- --------- ---- ---
这里 delimeter 用于分割命名空间,wildcard 用于启用通配符模式。
发布事件
您可以使用 emit() 方法发布事件并将它传递给感兴趣的观察者。
在此示例中,我们首先将侦听器附加到事件。接下来,我们在事件实例上调用 emit() 方法并将 event1 事件及其相关数据传递给该方法,以触发所有感兴趣的观察者:
------------------ ---- -- - ------------------- ------- ---- ------ ------ --- -------------------- - ---- ----- ---
添加观察者
要添加观察者,请使用 on() 或 once() 方法。 on() 方法将观察者附加到事件并在下一个事件调用时执行,而 once() 方法将观察者附加到事件并在下一个事件调用后自动删除它。
-- ---- ------------------ ------------------ ---- -- - ------------------- ------- ---- ------ ------ --- -- ------ ------------- -------------------- ---- -- - ------------------- ------- ---- ------ ------ ---
删除观察者
要删除观察者,请使用 off() 方法并传递之前发送的事件名称和要删除的观察者:
----- -------- - ------ -- - --------------------- -------- -------- ------ -- ------------------ ---------- -------------------- - ---- ----- --- -- ------- -------- -------- ------ - ---- ----- - ------------------- ---------- -------------------- - ---- ------ --- -- ------- -------
通配符
emity 还支持通配符事件,可以使用 * 表示任意的事件名,** 表示任意的深度。
例如,您可以使用 emity.on('some-event/**', fn) 或 emity.on('some-**', fn) 来订阅命名空间 some-event 下的所有事件。
--------------------------- ---- -- - ----------------- ------- --------- ------ --- --------------------------------- - ----- --------- --- -- ------- ---- ------- ------- - ----- --------- -
在浏览器中使用 emity
emity 同样可以在浏览器中使用。只需在您的 HTML 文件中添加以下代码即可使用 emity:
------- --------------------------------- -------- ----- ----- - --- -------- ----------------- ---------- - ------------- -------- --- -------------------- ---------
总结
至此,我们已经学习了 emity 的用法。使用 emity 使我们可以轻松地在我们的代码库中创建事件发布/订阅机制,并且执行起来也相当快。我们可以利用 emity 构建可维护性更高,性能更好,功能更丰富的模块化代码库。
参考资料
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/60066e1ca563576b7b1ecc74