Skip to content

Commit ef01d3c

Browse files
JeanMechethePunderWoman
authored andcommitted
refactor(core): Merge R3TemplateRef implementation and TemplateRef interface (angular#61455)
This was an artifact of the Ivy migration. PR Close angular#61455
1 parent e57509e commit ef01d3c

5 files changed

Lines changed: 31 additions & 62 deletions

File tree

goldens/public-api/core/index.api.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1776,9 +1776,9 @@ export interface StreamingResourceOptions<T, R> extends BaseResourceOptions<T, R
17761776
}
17771777

17781778
// @public
1779-
export abstract class TemplateRef<C> {
1780-
abstract createEmbeddedView(context: C, injector?: Injector): EmbeddedViewRef<C>;
1781-
abstract readonly elementRef: ElementRef;
1779+
export class TemplateRef<C> {
1780+
createEmbeddedView(context: C, injector?: Injector): EmbeddedViewRef<C>;
1781+
readonly elementRef: ElementRef;
17821782
}
17831783

17841784
// @public

packages/core/src/linker/template_ref.ts

Lines changed: 28 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {TContainerNode, TNode, TNodeType} from '../render3/interfaces/node';
1212
import {LView} from '../render3/interfaces/view';
1313
import {getCurrentTNode, getLView} from '../render3/state';
1414
import {createAndRenderEmbeddedLView} from '../render3/view_manipulation';
15-
import {ViewRef as R3_ViewRef} from '../render3/view_ref';
15+
import {ViewRef} from '../render3/view_ref';
1616
import {assertDefined} from '../util/assert';
1717

1818
import {createElementRef, ElementRef} from './element_ref';
@@ -35,7 +35,7 @@ import {EmbeddedViewRef} from './view_ref';
3535
*
3636
* @publicApi
3737
*/
38-
export abstract class TemplateRef<C> {
38+
export class TemplateRef<C> {
3939
/**
4040
* The anchor element in the parent view for this embedded view.
4141
*
@@ -47,59 +47,21 @@ export abstract class TemplateRef<C> {
4747
* data-binding and injection context from the original location.
4848
*
4949
*/
50-
// TODO(i): rename to anchor or location
51-
abstract readonly elementRef: ElementRef;
52-
53-
/**
54-
* Instantiates an unattached embedded view based on this template.
55-
* @param context The data-binding context of the embedded view, as declared
56-
* in the `<ng-template>` usage.
57-
* @param injector Injector to be used within the embedded view.
58-
* @returns The new embedded view object.
59-
*/
60-
abstract createEmbeddedView(context: C, injector?: Injector): EmbeddedViewRef<C>;
61-
62-
/**
63-
* Implementation of the `createEmbeddedView` function.
64-
*
65-
* This implementation is internal and allows framework code
66-
* to invoke it with extra parameters (e.g. for hydration) without
67-
* affecting public API.
68-
*
69-
* @internal
70-
*/
71-
abstract createEmbeddedViewImpl(
72-
context: C,
73-
injector?: Injector,
74-
dehydratedView?: DehydratedContainerView | null,
75-
): EmbeddedViewRef<C>;
76-
77-
/**
78-
* Returns an `ssrId` associated with a TView, which was used to
79-
* create this instance of the `TemplateRef`.
80-
*
81-
* @internal
82-
*/
83-
abstract get ssrId(): string | null;
50+
readonly elementRef: ElementRef;
8451

8552
/**
8653
* @internal
8754
* @nocollapse
8855
*/
8956
static __NG_ELEMENT_ID__: () => TemplateRef<any> | null = injectTemplateRef;
90-
}
9157

92-
const ViewEngineTemplateRef = TemplateRef;
93-
94-
// TODO(alxhub): combine interface and implementation. Currently this is challenging since something
95-
// in g3 depends on them being separate.
96-
const R3TemplateRef = class TemplateRef<T> extends ViewEngineTemplateRef<T> {
58+
/** @internal */
9759
constructor(
9860
private _declarationLView: LView,
9961
private _declarationTContainer: TContainerNode,
100-
public override elementRef: ElementRef,
62+
elementRef: ElementRef,
10163
) {
102-
super();
64+
this.elementRef = elementRef;
10365
}
10466

10567
/**
@@ -108,31 +70,44 @@ const R3TemplateRef = class TemplateRef<T> extends ViewEngineTemplateRef<T> {
10870
*
10971
* @internal
11072
*/
111-
override get ssrId(): string | null {
73+
get ssrId(): string | null {
11274
return this._declarationTContainer.tView?.ssrId || null;
11375
}
11476

115-
override createEmbeddedView(context: T, injector?: Injector): EmbeddedViewRef<T> {
77+
/**
78+
* Instantiates an unattached embedded view based on this template.
79+
* @param context The data-binding context of the embedded view, as declared
80+
* in the `<ng-template>` usage.
81+
* @param injector Injector to be used within the embedded view.
82+
* @returns The new embedded view object.
83+
*/
84+
createEmbeddedView(context: C, injector?: Injector): EmbeddedViewRef<C> {
11685
return this.createEmbeddedViewImpl(context, injector);
11786
}
11887

11988
/**
89+
* Implementation of the `createEmbeddedView` function.
90+
*
91+
* This implementation is internal and allows framework code
92+
* to invoke it with extra parameters (e.g. for hydration) without
93+
* affecting public API.
94+
*
12095
* @internal
12196
*/
122-
override createEmbeddedViewImpl(
123-
context: T,
97+
createEmbeddedViewImpl(
98+
context: C,
12499
injector?: Injector,
125-
dehydratedView?: DehydratedContainerView,
126-
): EmbeddedViewRef<T> {
100+
dehydratedView?: DehydratedContainerView | null,
101+
): EmbeddedViewRef<C> {
127102
const embeddedLView = createAndRenderEmbeddedLView(
128103
this._declarationLView,
129104
this._declarationTContainer,
130105
context,
131106
{embeddedViewInjector: injector, dehydratedView},
132107
);
133-
return new R3_ViewRef<T>(embeddedLView);
108+
return new ViewRef<C>(embeddedLView);
134109
}
135-
};
110+
}
136111

137112
/**
138113
* Creates a TemplateRef given a node.
@@ -153,7 +128,7 @@ export function injectTemplateRef<T>(): TemplateRef<T> | null {
153128
export function createTemplateRef<T>(hostTNode: TNode, hostLView: LView): TemplateRef<T> | null {
154129
if (hostTNode.type & TNodeType.Container) {
155130
ngDevMode && assertDefined(hostTNode.tView, 'TView must be allocated');
156-
return new R3TemplateRef(
131+
return new TemplateRef(
157132
hostLView,
158133
hostTNode as TContainerNode,
159134
createElementRef(hostTNode, hostLView),

packages/core/test/bundling/forms_reactive/bundle.golden_symbols.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,6 @@
152152
"PlatformRef",
153153
"PristineChangeEvent",
154154
"R3Injector",
155-
"R3TemplateRef",
156155
"R3ViewContainerRef",
157156
"REACTIVE_LVIEW_CONSUMER_NODE",
158157
"REACTIVE_NODE",
@@ -202,7 +201,6 @@
202201
"ValueChangeEvent",
203202
"ViewContainerRef",
204203
"ViewEncapsulation",
205-
"ViewEngineTemplateRef",
206204
"ViewRef",
207205
"ZONELESS_ENABLED",
208206
"ZONELESS_SCHEDULER_DISABLED",

packages/core/test/bundling/forms_template_driven/bundle.golden_symbols.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,6 @@
149149
"PlatformRef",
150150
"PristineChangeEvent",
151151
"R3Injector",
152-
"R3TemplateRef",
153152
"R3ViewContainerRef",
154153
"REACTIVE_LVIEW_CONSUMER_NODE",
155154
"REACTIVE_NODE",
@@ -199,7 +198,6 @@
199198
"ValueChangeEvent",
200199
"ViewContainerRef",
201200
"ViewEncapsulation",
202-
"ViewEngineTemplateRef",
203201
"ViewRef",
204202
"ZONELESS_ENABLED",
205203
"ZONELESS_SCHEDULER_DISABLED",

packages/core/test/bundling/router/bundle.golden_symbols.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,6 @@
171171
"QUERY_PARAM_VALUE_RE",
172172
"QueryList",
173173
"R3Injector",
174-
"R3TemplateRef",
175174
"R3ViewContainerRef",
176175
"REACTIVE_LVIEW_CONSUMER_NODE",
177176
"REACTIVE_NODE",
@@ -248,7 +247,6 @@
248247
"VE_ViewContainerRef",
249248
"ViewContainerRef",
250249
"ViewEncapsulation",
251-
"ViewEngineTemplateRef",
252250
"ViewRef",
253251
"XSS_SECURITY_URL",
254252
"ZONELESS_ENABLED",

0 commit comments

Comments
 (0)