浏览器端是否有任何EventEmitter在nodejs中具有类似的逻辑?

时间:2017-08-23 06:12:19

标签: javascript browser

在node.js中使用eventEmitter非常容易:

var e = new EventEmitter();
e.on('happy', function(){console.log('good')});
e.emit('happy');

浏览器原生的任何客户端EventEmitter?

6 个答案:

答案 0 :(得分:8)

在现代浏览器中,存在EventTarget。

class MyClass extends EventTarget {
  doSomething() {
    this.dispatchEvent(new Event('something'));
  }
}

const instance = new MyClass();
instance.addEventListener('something', (e) => {
  console.log('Instance fired "something".', e);
});
instance.doSomething();

其他资源:

答案 1 :(得分:2)

这对于给定的情况就足够了。

class EventEmitter{
    constructor(){
        this.callbacks = {}
    }

    on(event, cb){
        if(!this.callbacks[event]) this.callbacks[event] = [];
        this.callbacks[event].push(cb)
    }

    emit(event, data){
        let cbs = this.callbacks[event]
        if(cbs){
            cbs.forEach(cb => cb(data))
        }
    }
}

更新: 我刚刚发布了一些改进版本。这很简单,但可能就足够了: https://www.npmjs.com/package/alpeventemitter

答案 2 :(得分:2)

有一个名为“ events”的NPM程序包,使您能够在浏览器环境中创建事件发射器。

var EventEmitter = require('events')
 
var e = new EventEmitter()
e.on('message', function (text) {
  console.log(text)
})
e.emit('message', 'hello world')

在您的情况下,是

var EventEmitter = require('events')

var e = new EventEmitter();
e.on('happy', function(){console.log('good')});
e.emit('happy');

答案 3 :(得分:0)

在客户端中创建一个自定义事件,并附加到dom元素:

var event = new Event('build');

// Listen for the event.
elem.addEventListener('build', function (e) { /* ... */ }, false);

// Dispatch the event.
elem.dispatchEvent(event);

此引用来自:https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events 谢谢Naeem Shaikh

答案 4 :(得分:0)

我最终使用了这个

export let createEventEmitter = () => {
   let callbackList: (() => any)[] = []

   return {
      on(callback: () => any) {
         callbackList.push(callback)
      },
      emit() {
         callbackList.forEach((callback) => {
            callback()
         })
      },
   }
}

答案 5 :(得分:-1)

您需要一个JavaScript库,例如https://github.com/Olical/EventEmitter