@daoxin/event
TypeScript icon, indicating that this package has built-in type declarations

0.0.5 • Public • Published

EventBus

一个极简的 EventBus 事件总线.

Install

npm i @daoxin/event

or

yarn add @daoxin/event

Documentation

Get Started

import EventBus from "@daoxin/event";

const hub = new EventBus();

hub.on("custom-send", (message) => {
  console.log(message);
});

hub.emit("custom-send", "Hello, EventBus!");
// => Hello, EventBus!

or

import mitt from "@daoxin/event/mitt";

const emitter = mitt()

// listen to an event
emitter.on('foo', e => console.log('foo', e) )

// listen to all events
emitter.on('*', (type, e) => console.log(type, e) )

// fire an event
emitter.emit('foo', { a: 'b' })

// clearing all events
emitter.all.clear()

// working with handler references:
function onFoo() {}
emitter.on('foo', onFoo)   // listen
emitter.off('foo', onFoo)  // unlisten

# typescript

import mitt from "@daoxin/event/mitt";

type Events = {
  foo: string;
  bar?: number;
};

const emitter = mitt<Events>(); // inferred as Emitter<Events>

emitter.on('foo', (e) => {}); // 'e' has inferred type 'string'

emitter.emit('foo', 42); // Error: Argument of type 'number' is not assignable to parameter of type 'string'. (2345)
// looks => https://github.com/developit/mitt

or in Vue

import EventBus from "@daoxin/event";
import mitt from "@daoxin/event/mitt";

# Vue2
new Vue({
  router,
  store,
  render: (h) => h(App),
  beforeCreate() {
    Vue.prototype.$bus = this	// Global Install vm
    Vue.prototype.$eventBus = new EventBus()	//Global Install EventBus
    Vue.prototype.$emitter = new mitt()	//Global Install EventBus
  }
}).$mount("#app");

// example:
this.$bus.on('useBus', function(data) {	console.log(data)})
this.$bus.emit('useBus', '111')

this.$eventBus.on('useBus', function(data) {	console.log(data)})
this.$eventBus.emit('useBus', '111')

this.$emitter.on('useBus', function(data) {	console.log(data)})
this.$emitter.emit('useBus', '111')

# Vue3
import App from "./App"

const app = createApp(App)
app.use(router).use(store).use("#app")

app.config.globalProperties.$eventBus = EventBus()
app.config.globalProperties.$emitter = mitt()

// example:
import { getCurrentInstance } from "vue";
const { proxy } = getCurrentInstance()
proxy.$eventBus.on('foo', e => console.log('foo', e))
proxy.$eventBus.emit('foo', '11')

proxy.$emitter.on('foo', e => console.log('foo', e))
proxy.$emitter.emit('foo', '11')

// unmounted
onUnmounted(()=>{proxy.$eventBus.off('foo')})
onUnmounted(()=>{proxy.$emitter.off('foo')})

Instance Methods

Event

Event name type.

type Event = string | symbol;

on(event,handler)

  • Arguments:
    • {Event | Event[]} event
    • {Function} handler
  • Usage:

    Listen for a custom event on the current Instance. Events can be triggered by instance.emit. The handler will receive all the additional arguments passed into these event-triggering methods.

once(event,handler)

  • Arguments:
    • {Event} event
    • {Function} handler
  • Usage:

    Listen for a custom event, but only once. The listener will be removed once it triggers for the first time.

off([event,handler])

  • Arguments:
    • {Event | Event[]} event
    • {Function} [handler]
  • Usage:

    Remove custom event listener(s).

    • If no arguments are provided, remove all event listeners;
    • If only the event is provided, remove all listeners for that event;
    • If both event and handler are given, remove the listener for that specific handler only.

emit(event,...args)

  • Arguments:

    • {Event} event

    • {any} ...args

  • Usage:

    Trigger an event on the current instance. Any additional arguments will be passed into the listener’s handler function.

License

This project is licensed under the MIT License - see the LICENSE file for details

Package Sidebar

Install

npm i @daoxin/event

Weekly Downloads

5

Version

0.0.5

License

MIT

Unpacked Size

29.6 kB

Total Files

10

Last publish

Collaborators

  • daoxin