feat(core): view engine - add support for OnPush and detached views. (#14216)

Part of #14013

PR Close #14216
This commit is contained in:
Tobias Bosch
2017-01-31 14:52:01 -08:00
committed by Miško Hevery
parent 08ff67ea11
commit 45e1e36477
11 changed files with 333 additions and 131 deletions

View File

@ -10,7 +10,7 @@ import {isDevMode} from '../application_ref';
import {SecurityContext} from '../security';
import {BindingDef, BindingType, DebugContext, DisposableFn, ElementData, ElementOutputDef, EntryAction, NodeData, NodeDef, NodeFlags, NodeType, QueryValueType, ViewData, ViewDefinition, ViewFlags, asElementData} from './types';
import {checkAndUpdateBinding, entryAction, setBindingDebugInfo, setCurrentNode, sliceErrorStack, unwrapValue} from './util';
import {checkAndUpdateBinding, dispatchEvent, entryAction, setBindingDebugInfo, setCurrentNode, sliceErrorStack, unwrapValue} from './util';
export function anchorDef(
flags: NodeFlags, matchedQueries: [string, QueryValueType][], ngContentIndex: number,
@ -192,17 +192,14 @@ export function createElement(view: ViewData, renderHost: any, def: NodeDef): El
}
function renderEventHandlerClosure(view: ViewData, index: number, eventName: string) {
return entryAction(EntryAction.HandleEvent, (event: any) => {
setCurrentNode(view, index);
return view.def.handleEvent(view, index, eventName, event);
});
return entryAction(
EntryAction.HandleEvent, (event: any) => dispatchEvent(view, index, eventName, event));
}
function directDomEventHandlerClosure(view: ViewData, index: number, eventName: string) {
return entryAction(EntryAction.HandleEvent, (event: any) => {
setCurrentNode(view, index);
const result = view.def.handleEvent(view, index, eventName, event);
const result = dispatchEvent(view, index, eventName, event);
if (result === false) {
event.preventDefault();
}