(function () { "use strict"; angular .module("app.models") .service("appModels.eventEmitterService", EventEmitter); function EventEmitter() { return { EventEmitter: EventEmitterModel }; function EventEmitterModel() { this.events = {}; this.subscribe = function (eventName, fn) { if (!this.events[eventName]) { this.events[eventName] = []; } this.events[eventName].push(fn); return function(){ this.events[eventName] = this.events[eventName].filter(function(eventFn){return fn !== eventFn}); }.bind(this); }; this.emit = function (eventName, data) { var event = this.events[eventName]; if (event) { event.forEach(function(fn){ fn.call(null, data); }.bind(this)); } }; } } })();