
For efficiency reasons we often put several different data types (`RNode`, `LView`, `LContainer`, `StylingContext`) in same location in `LView`. This is because we don't want to pre-allocate space for it because the storage is sparse. This file contains utilities for dealing with such data types. How do we know what is stored at a given location in `LView`. - `Array.isArray(value) === false` => `RNode` (The normal storage value) - `Array.isArray(value) === true` => than the `value[0]` represents the wrapped value. - `typeof value[TYPE] === 'object'` => `LView` - This happens when we have a component at a given location - `typeof value[TYPE] === 'number'` => `StylingContext` - This happens when we have style/class binding at a given location. - `typeof value[TYPE] === true` => `LContainer` - This happens when we have `LContainer` binding at a given location. NOTE: it is assumed that `Array.isArray` and `typeof` operations are very efficient. PR Close #28947
60 lines
1.6 KiB
TypeScript
60 lines
1.6 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google Inc. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.io/license
|
|
*/
|
|
|
|
|
|
import {RNode} from './renderer';
|
|
import {LView} from './view';
|
|
|
|
/**
|
|
* This property will be monkey-patched on elements, components and directives
|
|
*/
|
|
export const MONKEY_PATCH_KEY_NAME = '__ngContext__';
|
|
|
|
/**
|
|
* The internal view context which is specific to a given DOM element, directive or
|
|
* component instance. Each value in here (besides the LView and element node details)
|
|
* can be present, null or undefined. If undefined then it implies the value has not been
|
|
* looked up yet, otherwise, if null, then a lookup was executed and nothing was found.
|
|
*
|
|
* Each value will get filled when the respective value is examined within the getContext
|
|
* function. The component, element and each directive instance will share the same instance
|
|
* of the context.
|
|
*/
|
|
export interface LContext {
|
|
/**
|
|
* The component's parent view data.
|
|
*/
|
|
lView: LView;
|
|
|
|
/**
|
|
* The index instance of the node.
|
|
*/
|
|
nodeIndex: number;
|
|
|
|
/**
|
|
* The instance of the DOM node that is attached to the lNode.
|
|
*/
|
|
native: RNode;
|
|
|
|
/**
|
|
* The instance of the Component node.
|
|
*/
|
|
component: {}|null|undefined;
|
|
|
|
/**
|
|
* The list of active directives that exist on this element.
|
|
*/
|
|
directives: any[]|null|undefined;
|
|
|
|
/**
|
|
* The map of local references (local reference name => element or directive instance) that exist
|
|
* on this element.
|
|
*/
|
|
localRefs: {[key: string]: any}|null|undefined;
|
|
}
|