fix(ivy): DebugElement.triggerEventHandler not picking up events registered via Renderer2 (#31845)

Fixes Ivy's `DebugElement.triggerEventHandler` to picking up events that have been registered through a `Renderer2`, unlike ViewEngine.

This PR resolves FW-1480.

PR Close #31845
This commit is contained in:
Kristiyan Kostadinov
2019-07-31 07:23:47 +03:00
committed by Alex Rickabaugh
parent a610d12266
commit 184d270725
5 changed files with 99 additions and 5 deletions

View File

@ -377,11 +377,28 @@ class DebugElement__POST_R3__ extends DebugNode__POST_R3__ implements DebugEleme
}
triggerEventHandler(eventName: string, eventObj: any): void {
this.listeners.forEach((listener) => {
const node = this.nativeNode as any;
const invokedListeners: Function[] = [];
this.listeners.forEach(listener => {
if (listener.name === eventName) {
listener.callback(eventObj);
const callback = listener.callback;
callback(eventObj);
invokedListeners.push(callback);
}
});
// We need to check whether `eventListeners` exists, because it's something
// that Zone.js only adds to `EventTarget` in browser environments.
if (typeof node.eventListeners === 'function') {
// Note that in Ivy we wrap event listeners with a call to `event.preventDefault` in some
// cases. We use `Function` as a special token that gives us access to the actual event
// listener.
node.eventListeners(eventName).forEach((listener: Function) => {
const unwrappedListener = listener(Function);
return invokedListeners.indexOf(unwrappedListener) === -1 && unwrappedListener(eventObj);
});
}
}
}