12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- /**
- * @method useEventEmitter 事件监听发射器
- * @return {Object} 返回一组事件绑定的函数
- * @property addListener {Function} 添加特定事件监听器
- * @property removeListener {Function} 移除事件监听器
- * @property emit {Function} 触发特定事件,并依次调用与该事件关联的所有监听器函数
- * @property addOnceListener {Function} 添加一次特定事件监听器
- * @property removeAllListeners {Function} 移除所有特定事件监听器
- * @property getListeners {Function} 获取所有特定事件监听器
- * */
- const useEventEmitter = ()=>{
- let events = {};
- return {
- /**
- * @method addListener 添加特定事件监听器
- * @param eventName {String} 事件名
- * @param listener {Function} 监听函数
- * */
- addListener(eventName, listener) {
- if (!events[eventName]) {
- events[eventName] = [];
- }
- events[eventName].push(listener);
- },
- /**
- * @method addOnceListener 添加一次特定事件监听器
- * @param eventName {String} 事件名
- * @param listener {Function} 监听函数
- * */
- addOnceListener(eventName, listener) {
- const onceListener = (...args) => {
- this.removeListener(eventName, onceListener);
- listener.apply(null, args);
- };
- this.addListener(eventName, onceListener);
- },
- /**
- * @method removeListener 移除事件监听器
- * @param eventName {String} 事件名
- * @param listener {Function} 事件监听器函数
- * */
- removeListener(eventName, listener) {
- const eventCallbacks = events[eventName];
- if (eventCallbacks) {
- events[eventName] = events[eventName].filter(
- (eventListener) => eventListener !== listener
- );
- }
- },
- /**
- * @method emit 触发特定事件,并依次调用与该事件关联的所有监听器函数
- * @param eventName {String} 事件名
- * @param args 传给监听事件的参数
- * */
- emit(eventName, ...args) {
- const eventCallbacks = events[eventName];
- if (eventCallbacks) {
- eventCallbacks.forEach(callback => {
- callback.apply(null, args);
- });
- }
- },
- /**
- * @method addOnceListener 移除所有特定事件监听器
- * @param eventName {String} 事件名
- * */
- removeAllListeners(eventName) {
- const eventCallbacks = events[eventName];
- if (eventCallbacks) {
- delete events[eventName];
- }
- },
- /**
- * @method getListeners 获取所有特定事件监听器
- * @param eventName {String} 事件名
- * */
- getListeners(eventName) {
- return events[eventName] || [];
- }
- }
- };
- export default useEventEmitter
|