refactor(ivy): move hostVars
/hostAttrs
from instruction to DirectiveDef
(#34683)
This change moves information from instructions to declarative position: - `ɵɵallocHostVars(vars)` => `DirectiveDef.hostVars` - `ɵɵelementHostAttrs(attrs)` => `DirectiveDef.hostAttrs` When merging directives it is necessary to know about `hostVars` and `hostAttrs`. Before this change the information was stored in the `hostBindings` function. This was problematic, because in order to get to the information the `hostBindings` would have to be executed. In order for `hostBindings` to be executed the directives would have to be instantiated. This means that the directive instantiation would happen before we had knowledge about the `hostAttrs` and as a result the directive could observe in the constructor that not all of the `hostAttrs` have been applied. This further complicates the runtime as we have to apply `hostAttrs` in parts over many invocations. `ɵɵallocHostVars` was unnecessarily complicated because it would have to update the `LView` (and Blueprint) while existing directives are already executing. By moving it out of `hostBindings` function we can access it statically and we can create correct `LView` (and Blueprint) in a single pass. This change only changes how the instructions are generated, but does not change the runtime much. (We cheat by emulating the old behavior by calling `ɵɵallocHostVars` and `ɵɵelementHostAttrs`) Subsequent change will refactor the runtime to take advantage of the static information. PR Close #34683
This commit is contained in:
8
tools/public_api_guard/core/core.d.ts
vendored
8
tools/public_api_guard/core/core.d.ts
vendored
@ -682,8 +682,6 @@ export interface OutputDecorator {
|
||||
|
||||
export declare function ɵɵadvance(delta: number): void;
|
||||
|
||||
export declare function ɵɵallocHostVars(count: number): void;
|
||||
|
||||
export declare function ɵɵattribute(name: string, value: any, sanitizer?: SanitizerFn | null, namespace?: string): typeof ɵɵattribute;
|
||||
|
||||
export declare function ɵɵattributeInterpolate1(attrName: string, prefix: string, v0: any, suffix: string, sanitizer?: SanitizerFn, namespace?: string): typeof ɵɵattributeInterpolate1;
|
||||
@ -760,6 +758,8 @@ export declare function ɵɵdefineComponent<T>(componentDefinition: {
|
||||
[P in keyof T]?: string;
|
||||
};
|
||||
hostBindings?: HostBindingsFunction<T>;
|
||||
hostVars?: number;
|
||||
hostAttrs?: TAttributes;
|
||||
contentQueries?: ContentQueriesFunction<T>;
|
||||
exportAs?: string[];
|
||||
template: ComponentTemplate<T>;
|
||||
@ -785,6 +785,8 @@ export declare const ɵɵdefineDirective: <T>(directiveDefinition: {
|
||||
outputs?: { [P_1 in keyof T]?: string | undefined; } | undefined;
|
||||
features?: DirectiveDefFeature[] | undefined;
|
||||
hostBindings?: HostBindingsFunction<T> | undefined;
|
||||
hostVars?: number | undefined;
|
||||
hostAttrs?: (string | (string | SelectorFlags)[] | AttributeMarker)[] | undefined;
|
||||
contentQueries?: ContentQueriesFunction<T> | undefined;
|
||||
viewQuery?: ViewQueriesFunction<T> | null | undefined;
|
||||
exportAs?: string[] | undefined;
|
||||
@ -839,8 +841,6 @@ export declare function ɵɵelementContainerStart(index: number, attrsIndex?: nu
|
||||
|
||||
export declare function ɵɵelementEnd(): void;
|
||||
|
||||
export declare function ɵɵelementHostAttrs(attrs: TAttributes): void;
|
||||
|
||||
export declare function ɵɵelementStart(index: number, name: string, attrsIndex?: number | null, localRefsIndex?: number): void;
|
||||
|
||||
export declare function ɵɵembeddedViewEnd(): void;
|
||||
|
Reference in New Issue
Block a user