diff --git a/components/timeline/vis-timeline.service.ts b/components/timeline/vis-timeline.service.ts index 85c2a2a1..955335c4 100644 --- a/components/timeline/vis-timeline.service.ts +++ b/components/timeline/vis-timeline.service.ts @@ -130,6 +130,8 @@ export class VisTimelineService { */ public timechanged: EventEmitter = new EventEmitter(); + private events: Map> = new Map(); + private timelines: { [id: string]: VisTimeline } = {}; /** @@ -679,11 +681,11 @@ export class VisTimelineService { */ public on(visTimeline: string, eventName: VisTimelineEvents, preventDefault?: boolean): boolean { if (this.timelines[visTimeline]) { - /* tslint:disable */ + this.events.set(eventName, new EventEmitter()); + const that: { [index: string]: any } = this; - /* tslint:enable */ this.timelines[visTimeline].on(eventName, (params: any) => { - const emitter = that[eventName] as EventEmitter; + const emitter = (that[eventName] || that.events.get(eventName)) as EventEmitter; if (emitter) { emitter.emit(params ? [visTimeline].concat(params) : visTimeline); } @@ -708,10 +710,20 @@ export class VisTimelineService { */ public off(visTimeline: string, eventName: VisTimelineEvents): void { if (this.timelines[visTimeline]) { + this.events.delete(eventName); this.timelines[visTimeline].off(eventName, undefined); } } + /** + * Get the event emitter associated with the specified event name. + * @param {VisTimelineEvents} eventName The event name. + * @returns {EventEmitter} The event emitter of the specified event name. + */ + public getEmitter(eventName: VisTimelineEvents): EventEmitter { + return this.events.get(eventName); + } + private doesNotExistError(visTimeline: string): string { return `Timeline with id ${visTimeline} does not exist.`; }