From 62d46074994774204f84fcbb43566eb880441f26 Mon Sep 17 00:00:00 2001 From: Andrey Ovchinnikov Date: Tue, 17 Jan 2017 11:38:00 +0300 Subject: [PATCH] Support private events in Angular Events Strategy --- src/core/events-strategy.ts | 10 ++++++---- tests/src/core/component.spec.ts | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/core/events-strategy.ts b/src/core/events-strategy.ts index 8d78ecb2e..34b562d34 100644 --- a/src/core/events-strategy.ts +++ b/src/core/events-strategy.ts @@ -2,7 +2,6 @@ import { EventEmitter, NgZone } from '@angular/core'; import { DxComponent } from './component'; const dxToNgEventNames = {}; -const nullEmitter = new EventEmitter(); interface EventSubscriber { handler: any; @@ -15,8 +14,7 @@ export class NgEventsStrategy { constructor(private ngZone: NgZone, private component: DxComponent) { } hasEvent(name: string) { - let emitter = this.getEmitter(name); - return emitter !== nullEmitter && emitter.observers.length; + return this.getEmitter(name).observers.length; } fireEvent(name, args) { @@ -44,7 +42,11 @@ export class NgEventsStrategy { dispose() {} private getEmitter(eventName: string): EventEmitter { - return this.component[dxToNgEventNames[eventName]] || nullEmitter; + let ngEventName = dxToNgEventNames[eventName]; + if (!this.component[ngEventName]) { + this.component[ngEventName] = new EventEmitter(); + } + return this.component[ngEventName]; } } diff --git a/tests/src/core/component.spec.ts b/tests/src/core/component.spec.ts index 947b393b2..e554cb48a 100644 --- a/tests/src/core/component.spec.ts +++ b/tests/src/core/component.spec.ts @@ -331,4 +331,22 @@ describe('DevExtreme Angular 2 widget', () => { instance.option('testOption', 'new value'); })); + it('should fire unknown subscribed events', async(() => { + TestBed.overrideComponent(TestContainerComponent, { + set: { + template: '' + } + }); + + let fixture = TestBed.createComponent(TestContainerComponent); + fixture.detectChanges(); + + let instance = getWidget(fixture); + + instance.on('unknownEvent', function() { + expect(this).toBe(instance); + }); + instance.fireEvent('unknownEvent'); + })); + });