ebus-light
Version:
107 lines (77 loc) • 1.71 kB
Markdown
# 事件总线
<p align="center">
<img src="https://img.shields.io/npm/dw/ebus-light">
<img src="https://img.shields.io/npm/unpacked-size/ebus-light">
<img src="https://img.shields.io/npm/v/ebus-light">
<img src="https://img.shields.io/npm/l/ebus-light">
<img src="https://img.shields.io/github/last-commit/novlan1/plugin-light">
<img src="https://img.shields.io/github/created-at/novlan1/plugin-light">
</p>
轻量级的 Event Bus。
## 1. 如何使用
安装:
```bash
pnpm add ebus-light
```
使用方式有以下几种。
1. 直接引入
`bus` 是全局唯一的实例。
```ts
import { bus } from 'ebus-light';
bus.emit('foo', { name: 'yang' });
function onFoo(e) {
console.log(e.name);
}
bus.on('foo', onFoo)
bus.off('foo', onFoo)
```
2. Vue 插件
也可当作 `Vue` 插件,先在 `main.ts` 中注册:
```ts
import { eventBus } from 'ebus-light';
app.use(eventBus);
```
在页面中使用:
```ts
// options API
export default {
mounted() {
this.$eventBus.emit('foo')
}
}
```
通过 `inject` 访问:
```ts
import `inject` from 'vue';
export default {
setup() {
const bus = inject('$eventBus');
bus.emit('foo');
}
}
```
## 2. 类型
通过插件方式使用时传递的参数:
```ts
export interface Options {
// 是否挂载在全局
global?: boolean;
// 是否 provide
inject?: boolean;
// 实例上挂载的名称
globalPropertyName?: string;
// 通过 inject 引入的名称
injectName?: string;
}
```
参数默认值:
```ts
const DEFAULT_OPTIONS = {
global: false,
inject: false,
globalPropertyName: '$eventBus',
injectName: '$eventBus',
};
```
## 3. 更新日志
[点此查看](./CHANGELOG.md)