Skip to content

Commit d2262e7

Browse files
authored
Support private events in Angular Events Strategy (#338)
1 parent 78a70d0 commit d2262e7

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

src/core/events-strategy.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { EventEmitter, NgZone } from '@angular/core';
22
import { DxComponent } from './component';
33

44
const dxToNgEventNames = {};
5-
const nullEmitter = new EventEmitter<any>();
65

76
interface EventSubscriber {
87
handler: any;
@@ -15,8 +14,7 @@ export class NgEventsStrategy {
1514
constructor(private ngZone: NgZone, private component: DxComponent) { }
1615

1716
hasEvent(name: string) {
18-
let emitter = this.getEmitter(name);
19-
return emitter !== nullEmitter && emitter.observers.length;
17+
return this.getEmitter(name).observers.length;
2018
}
2119

2220
fireEvent(name, args) {
@@ -44,7 +42,11 @@ export class NgEventsStrategy {
4442
dispose() {}
4543

4644
private getEmitter(eventName: string): EventEmitter<any> {
47-
return this.component[dxToNgEventNames[eventName]] || nullEmitter;
45+
let ngEventName = dxToNgEventNames[eventName];
46+
if (!this.component[ngEventName]) {
47+
this.component[ngEventName] = new EventEmitter();
48+
}
49+
return this.component[ngEventName];
4850
}
4951
}
5052

tests/src/core/component.spec.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,4 +331,22 @@ describe('DevExtreme Angular 2 widget', () => {
331331
instance.option('testOption', 'new value');
332332
}));
333333

334+
it('should fire unknown subscribed events', async(() => {
335+
TestBed.overrideComponent(TestContainerComponent, {
336+
set: {
337+
template: '<dx-test-widget></dx-test-widget>'
338+
}
339+
});
340+
341+
let fixture = TestBed.createComponent(TestContainerComponent);
342+
fixture.detectChanges();
343+
344+
let instance = getWidget(fixture);
345+
346+
instance.on('unknownEvent', function() {
347+
expect(this).toBe(instance);
348+
});
349+
instance.fireEvent('unknownEvent');
350+
}));
351+
334352
});

0 commit comments

Comments
 (0)