Chains multiple listener instructions on a particular element into a single call which results in less generated code. Also handles listeners on templates, host listeners and synthetic host listeners. PR Close #33720 PR Close #34340
This commit is contained in:
@ -18,7 +18,7 @@ import {assertNodeOfPossibleTypes} from '../node_assert';
|
||||
import {getLView, getPreviousOrParentTNode} from '../state';
|
||||
import {getComponentLViewByIndex, getNativeByTNode, unwrapRNode} from '../util/view_utils';
|
||||
|
||||
import {getCleanup, handleError, loadComponentRenderer, markViewDirty} from './shared';
|
||||
import {TsickleIssue1009, getCleanup, handleError, loadComponentRenderer, markViewDirty} from './shared';
|
||||
|
||||
|
||||
|
||||
@ -38,11 +38,12 @@ import {getCleanup, handleError, loadComponentRenderer, markViewDirty} from './s
|
||||
*/
|
||||
export function ɵɵlistener(
|
||||
eventName: string, listenerFn: (e?: any) => any, useCapture = false,
|
||||
eventTargetResolver?: GlobalTargetResolver): void {
|
||||
eventTargetResolver?: GlobalTargetResolver): TsickleIssue1009 {
|
||||
const lView = getLView();
|
||||
const tNode = getPreviousOrParentTNode();
|
||||
listenerInternal(
|
||||
lView, lView[RENDERER], tNode, eventName, listenerFn, useCapture, eventTargetResolver);
|
||||
return ɵɵlistener;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -68,11 +69,12 @@ export function ɵɵlistener(
|
||||
*/
|
||||
export function ɵɵcomponentHostSyntheticListener(
|
||||
eventName: string, listenerFn: (e?: any) => any, useCapture = false,
|
||||
eventTargetResolver?: GlobalTargetResolver): void {
|
||||
eventTargetResolver?: GlobalTargetResolver): TsickleIssue1009 {
|
||||
const lView = getLView();
|
||||
const tNode = getPreviousOrParentTNode();
|
||||
const renderer = loadComponentRenderer(tNode, lView);
|
||||
listenerInternal(lView, renderer, tNode, eventName, listenerFn, useCapture, eventTargetResolver);
|
||||
return ɵɵcomponentHostSyntheticListener;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -107,8 +107,7 @@ describe('event listeners', () => {
|
||||
if (rf & RenderFlags.Create) {
|
||||
ɵɵlistener('custom', function() {
|
||||
return ctx.onDocumentCustomEvent();
|
||||
}, false, ɵɵresolveDocument as GlobalTargetResolver);
|
||||
ɵɵlistener('click', function() {
|
||||
}, false, ɵɵresolveDocument as GlobalTargetResolver)('click', function() {
|
||||
return ctx.onBodyClick();
|
||||
}, false, ɵɵresolveBody as GlobalTargetResolver);
|
||||
}
|
||||
|
@ -32,44 +32,34 @@ function testTemplate(rf: RenderFlags, ctx: any) {
|
||||
if (rf & 1) {
|
||||
ɵɵelementStart(0, 'div');
|
||||
ɵɵelementStart(1, 'button', 0);
|
||||
ɵɵlistener('click', function clickListener() {});
|
||||
ɵɵlistener('input', function inputListener() {});
|
||||
ɵɵlistener('click', function clickListener() {})('input', function inputListener() {});
|
||||
ɵɵelementEnd();
|
||||
ɵɵelementStart(2, 'button', 0);
|
||||
ɵɵlistener('click', function clickListener() {});
|
||||
ɵɵlistener('input', function inputListener() {});
|
||||
ɵɵlistener('click', function clickListener() {})('input', function inputListener() {});
|
||||
ɵɵelementEnd();
|
||||
ɵɵelementStart(3, 'button', 0);
|
||||
ɵɵlistener('click', function clickListener() {});
|
||||
ɵɵlistener('input', function inputListener() {});
|
||||
ɵɵlistener('click', function clickListener() {})('input', function inputListener() {});
|
||||
ɵɵelementEnd();
|
||||
ɵɵelementStart(4, 'button', 0);
|
||||
ɵɵlistener('click', function clickListener() {});
|
||||
ɵɵlistener('input', function inputListener() {});
|
||||
ɵɵlistener('click', function clickListener() {})('input', function inputListener() {});
|
||||
ɵɵelementEnd();
|
||||
ɵɵelementStart(5, 'button', 0);
|
||||
ɵɵlistener('click', function clickListener() {});
|
||||
ɵɵlistener('input', function inputListener() {});
|
||||
ɵɵlistener('click', function clickListener() {})('input', function inputListener() {});
|
||||
ɵɵelementEnd();
|
||||
ɵɵelementStart(6, 'button', 0);
|
||||
ɵɵlistener('click', function clickListener() {});
|
||||
ɵɵlistener('input', function inputListener() {});
|
||||
ɵɵlistener('click', function clickListener() {})('input', function inputListener() {});
|
||||
ɵɵelementEnd();
|
||||
ɵɵelementStart(7, 'button', 0);
|
||||
ɵɵlistener('click', function clickListener() {});
|
||||
ɵɵlistener('input', function inputListener() {});
|
||||
ɵɵlistener('click', function clickListener() {})('input', function inputListener() {});
|
||||
ɵɵelementEnd();
|
||||
ɵɵelementStart(8, 'button', 0);
|
||||
ɵɵlistener('click', function clickListener() {});
|
||||
ɵɵlistener('input', function inputListener() {});
|
||||
ɵɵlistener('click', function clickListener() {})('input', function inputListener() {});
|
||||
ɵɵelementEnd();
|
||||
ɵɵelementStart(9, 'button', 0);
|
||||
ɵɵlistener('click', function clickListener() {});
|
||||
ɵɵlistener('input', function inputListener() {});
|
||||
ɵɵlistener('click', function clickListener() {})('input', function inputListener() {});
|
||||
ɵɵelementEnd();
|
||||
ɵɵelementStart(10, 'button', 0);
|
||||
ɵɵlistener('click', function clickListener() {});
|
||||
ɵɵlistener('input', function inputListener() {});
|
||||
ɵɵlistener('click', function clickListener() {})('input', function inputListener() {});
|
||||
ɵɵelementEnd();
|
||||
ɵɵelementEnd();
|
||||
}
|
||||
|
Reference in New Issue
Block a user