0.0.3 • Published 2 months ago

@~crazy/eventmanager v0.0.3

Weekly downloads
-
License
ISC
Repository
-
Last release
2 months ago

EventManager

  • 事件管理器

使用方法

  • npm i @~crazy/eventmanager
import { EventManager } from '@~crazy/eventmanager';

interface EventMap {
    click: (target: HTMLElement)=> void;
    (event: 'click', target: HTMLElement): void;
}

const em = new EventManager<EventMap>();

em.addEventListener('click', target => {
    console.log(target);
});

em.dispatchEvent('click', document.body); // body

继承

class Atom extends EventManager<{
	$beforeCreate: () => void;
	(event: '$beforeCreate'): void;

	$created: () => void;
	(event: '$created'): void;

	$beforeDestroy: () => void;
	(event: '$beforeDestroy'): void;

	$destroyed: () => void;
	(event: '$destroyed'): void;
}> {
	/**
	 * 初始化
	 */
	init = true;
	/**
	 * 已销毁
	 */
	isDestroy = false;

	/**
	 * 安装
	 */
	setup() {
		this.dispatchEvent('$beforeCreate');
		this.init = false;
		this.dispatchEvent('$created');
	}

	/**
	 * 销毁
	 */
	destroy() {
		this.dispatchEvent('$beforeDestroy');
		this.isDestroy = true;
		this.dispatchEvent();
	}
}

const atom = new Atom();
atom.addEventListener('$beforeCreate', () => {
	console.log('创建前');
});
atom.addEventListener('$created', () => {
	console.log('创建完成', atom.init, atom.isDestroy);
});
atom.addEventListener('$beforeDestroy', () => {
	console.log('销毁前');
});
atom.addEventListener('$destroyed', () => {
	console.log('销毁完成', atom.isDestroy);
});
atom.setup();
// 创建前
// 创建完成 false false
atom.destroy();
// 销毁前
// 销毁完成 true