Package Exports
- @yaohaixiao/subscribers.js
- @yaohaixiao/subscribers.js/dist/subscribers.min.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@yaohaixiao/subscribers.js) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
subscribers.js
又一个小巧简单而且实用的发布/订阅 JavaScript 工具库!
Features
- 原生 JavaScript 编写,无任何依赖;
- 基于 topic 主题的消息,且支持命名空间的订阅/发布;
- 支持异/同步 publish 消息;
- 支持 UMD 规范,同时也提供 ES6 模块调用;
- API 接口调用简单便捷;
Browsers support
IE / Edge |
Firefox |
Chrome |
Safari |
Opera |
|---|---|---|---|---|
| IE11, Edge | last 10 versions | last 10 versions | last 10 versions | last 10 versions |
安装说明
subscribers.js 支持 UMD 规范和 ES6 的模块调用方式,可以在 Node.js 环境中(仅适用于单线程的 Node.js 应用)使用 npm 安装,也可以在浏览器中使用 script 标签引入到页面。
npm 安装
# install from npmjs.com
npm i -S @yaohaixiao/subscribers.js浏览器中调用
在浏览器中调用 subscribers.js,可以选择调用 jsdelivr 提供的 CDN 服务中的文件,也可以使用本地的 subscribers.js 文件。
CDN 调用 JS 文件
<script src="https://cdn.jsdelivr.net/gh/yaohaixiao/subscribers.js/dist/subscribers.min.js"></script>本地调用 JS 文件
<script src="/path/to/subscribers.min.js"></script>Node.js 中调用
const Subscribers = require('@yaohaixiao/subscribers.js')ES6 模块中调用
// 调用 Subscribers 对象
import Subscribers from '@yaohaixiao/subscribers.js/esm/subscribers'Usage
import Subscribers from '@yaohaixiao/subscribers.js'
// 创建订阅主题的函数
const handler = (msg, data) => {
console.log( msg, data )
}
/* 订阅主题 */
// 将函数添加到特定主题的订阅者列表中
Subscribers.subscribe('log', handler)
// 采用命名空间式的消息主题
Subscribers.subscribe('log.info', handler)
Subscribers.subscribe('log.info.update', handler)
/* 发布主题 */
// 发布一个(名为:log)消息,log 会触发
Subscribers.publish('log', 'hello world!')
// log/log.info/log.info.update 主题的处理器函数都将执行
Subscribers.publish('log.info.update', `hello world! it's update!`)
/* 取消订阅 */
// 将 handler 函数从 log 主题中订阅者列表中移除
Subscribers.unsubscribe('log', handler)
const token = Subscribers.subscribe('alert', handler)
// 将 handler 函数从 alert 主题中订阅者列表中移除
Subscribers.unsubscribe('alert', token)
// 移除 log 主题及订阅者列表
Subscribers.unsubscribe('log')API 文档
subscribers.js 中封装了一系列常用方法,并且适用起来非常方便。
methods
subscribe(topic, handler)
订阅主题,并给出处理器函数。
Parameters
topic
Type: String
Default: ``
(必须)主题名称。
handler
Type: Function
Default: ``
(必须)主题的处理器函数。
Subscribers.subscribe('author', handlerAuthor)
// 支持命名空间形式的主题的订阅
Subscribers.subscribe('author.career', handlerCareer)
Subscribers.subscribe('author.career.years', handlerYears)subscribeOnce(topic, handler)
订阅主题,并给出处理器函数,仅执行一次。
Parameters
topic
Type: String
Default: ``
(必须)主题名称。
handler
Type: Function
Default: ``
(必须)主题的处理器函数。
Subscribers.subscribeOnce('author', handlerAuthor)
Subscribers.publish('author', 'ok')
// handlerAuthor() 函数将不再执行
Subscribers.publish('author', 'again')publish(topic, data[, async = true])
发布订阅主题信息。
Parameters
topic
Type: String
Default: ``
(必须)主题名称。
data
Type: Object
Default: ``
必须)消息传递的数据对象。
async
Type: Boolean
Default: true
(可选) 是否异步发布。默认值:true。
Subscribers.subscribe('author', handlerAuthor)
Subscribers.subscribe('author.career', handlerCareer)
Subscribers.subscribe('author.career.years', handlerYears)
// 异步发布
Subscribers.publish('author', 'ok')
// 同步发布
Subscribers.publish('author', 'ok', false)unsubscribe(topic[, token])
取消订阅主题。
Parameters
topic
Type: String
Default: ``
(必须)主题名称。
token
Type: Function|String
Default: ``
(可选)订阅主题的处理器函数或者唯一 Id 值。
Subscribers.subscribe('author', handlerAuthor)
const token = Subscribers.subscribe('author.career', handlerCareer)
// 取消订阅 author 主题
Subscribers.unsubscribe('author',handlerAuthor)
// 取消订阅 author.career 主题
Subscribers.publish('author.career', token)getSubscriptions([topic])
获取全部或者包含 topic 主题的订阅者信息。
Parameters
topic
Type: String
Default: ``
(可选)主题名称。传递 topic 参数,返回包含 topic 主题的订阅者信息,不传递 topic 参数,返回全部订阅者信息。
Subscribers.subscribe('author', handlerAuthor)
Subscribers.subscribe('author.career', handlerCareer)
Subscribers.subscribe('author.career.years', handlerYears)
// 获取 author 主题订阅者信息
Subscribers.getSubscriptions('author')
// 获取所有订阅者信息
Subscribers.getSubscriptions()deleteSubscriber(topic)
删除特定 topic 主题的订阅者信息。
Parameters
topic
Type: String
Default: ``
(必须)主题名称。
Subscribers.subscribe('author', handlerAuthor)
// 删除 author 主题相关的所有信息
Subscribers.deleteSubscriber('autor')deleteSubscribers(topic)
删除包含 topic 主题的订阅者信息。
Parameters
topic
Type: String
Default: ``
(必须)主题名称。
Subscribers.subscribe('author', handlerAuthor)
Subscribers.subscribe('author.career', handlerCareer)
Subscribers.subscribe('author.career.years', handlerYears)
// 删除包含 author 或者 author.career 主题相关的所有信息
Subscribers.deleteSubscribers('author.career')clear()
清理所有订阅者(主题和处理器的)信息
Subscribers.subscribe('author', handlerAuthor)
Subscribers.subscribe('author.career', handlerCareer)
Subscribers.subscribe('author.career.years', handlerYears)
// 清理所有订阅者(主题和处理器的)信息
Subscribers.clear()License
Licensed under MIT License.




