diff --git a/packages/core/src/application_ref.ts b/packages/core/src/application_ref.ts index f9beaee0062..e393613e393 100644 --- a/packages/core/src/application_ref.ts +++ b/packages/core/src/application_ref.ts @@ -34,7 +34,7 @@ import {COMPILER_OPTIONS, CompilerOptions} from './linker/compiler'; import {ComponentFactory, ComponentRef} from './linker/component_factory'; import {ComponentFactoryResolver} from './linker/component_factory_resolver'; import {InternalNgModuleRef, NgModuleFactory, NgModuleRef} from './linker/ng_module_factory'; -import {InternalViewRef, ViewRef} from './linker/view_ref'; +import {ViewRef} from './linker/view_ref'; import {isComponentResourceResolutionQueueEmpty, resolveComponentResources} from './metadata/resource_loading'; import {assertNgModuleType} from './render3/assert'; import {ComponentFactory as R3ComponentFactory} from './render3/component_ref'; @@ -44,6 +44,7 @@ import {setLocaleId} from './render3/i18n/i18n_locale_id'; import {setJitOptions} from './render3/jit/jit_options'; import {createNgModuleRefWithProviders, EnvironmentNgModuleRefAdapter, NgModuleFactory as R3NgModuleFactory} from './render3/ng_module_ref'; import {publishDefaultGlobalUtils as _publishDefaultGlobalUtils} from './render3/util/global_utils'; +import {ViewRef as InternalViewRef} from './render3/view_ref'; import {TESTABILITY} from './testability/testability'; import {isPromise} from './util/lang'; import {stringify} from './util/stringify'; @@ -825,7 +826,7 @@ export class ApplicationRef { private _destroyed = false; private _destroyListeners: Array<() => void> = []; /** @internal */ - _views: InternalViewRef[] = []; + _views: InternalViewRef[] = []; private readonly internalErrorHandler = inject(INTERNAL_APPLICATION_ERROR_HANDLER); private readonly zoneIsStable = inject(ZONE_IS_STABLE_OBSERVABLE); @@ -1077,7 +1078,7 @@ export class ApplicationRef { */ attachView(viewRef: ViewRef): void { (typeof ngDevMode === 'undefined' || ngDevMode) && this.warnIfDestroyed(); - const view = (viewRef as InternalViewRef); + const view = (viewRef as InternalViewRef); this._views.push(view); view.attachToAppRef(this); } @@ -1087,7 +1088,7 @@ export class ApplicationRef { */ detachView(viewRef: ViewRef): void { (typeof ngDevMode === 'undefined' || ngDevMode) && this.warnIfDestroyed(); - const view = (viewRef as InternalViewRef); + const view = (viewRef as InternalViewRef); remove(this._views, view); view.detachFromAppRef(); } diff --git a/packages/core/src/linker/view_ref.ts b/packages/core/src/linker/view_ref.ts index d8a44012cc9..7692cd4d3fd 100644 --- a/packages/core/src/linker/view_ref.ts +++ b/packages/core/src/linker/view_ref.ts @@ -101,11 +101,6 @@ export abstract class EmbeddedViewRef extends ViewRef { abstract get rootNodes(): any[]; } -export interface InternalViewRef extends ViewRef { - detachFromAppRef(): void; - attachToAppRef(appRef: ViewRefTracker): void; -} - /** * Interface for tracking root `ViewRef`s in `ApplicationRef`. * diff --git a/packages/core/src/render3/component_ref.ts b/packages/core/src/render3/component_ref.ts index 3aeca1fa8a3..c5ee9dc3b2b 100644 --- a/packages/core/src/render3/component_ref.ts +++ b/packages/core/src/render3/component_ref.ts @@ -51,7 +51,7 @@ import {computeStaticStyling} from './styling/static_styling'; import {mergeHostAttrs, setUpAttributes} from './util/attrs_utils'; import {debugStringifyTypeForError, stringifyForError} from './util/stringify_utils'; import {getComponentLViewByIndex, getNativeByTNode, getTNode} from './util/view_utils'; -import {RootViewRef, ViewRef} from './view_ref'; +import {ViewRef} from './view_ref'; export class ComponentFactoryResolver extends AbstractComponentFactoryResolver { /** @@ -319,7 +319,11 @@ export class ComponentRef extends AbstractComponentRef { private _tNode: TElementNode|TContainerNode|TElementContainerNode) { super(); this.instance = instance; - this.hostView = this.changeDetectorRef = new RootViewRef(_rootLView); + this.hostView = this.changeDetectorRef = new ViewRef( + _rootLView, + undefined, /* _cdRefInjectingView */ + false, /* notifyErrorHandler */ + ); this.componentType = componentType; } diff --git a/packages/core/src/render3/view_ref.ts b/packages/core/src/render3/view_ref.ts index 6aeaedc35bb..4bb74684556 100644 --- a/packages/core/src/render3/view_ref.ts +++ b/packages/core/src/render3/view_ref.ts @@ -8,7 +8,7 @@ import {ChangeDetectorRef} from '../change_detection/change_detector_ref'; import {RuntimeError, RuntimeErrorCode} from '../errors'; -import {EmbeddedViewRef, InternalViewRef, ViewRefTracker} from '../linker/view_ref'; +import {EmbeddedViewRef, ViewRefTracker} from '../linker/view_ref'; import {removeFromArray} from '../util/array_utils'; import {assertEqual} from '../util/assert'; @@ -27,7 +27,7 @@ import {storeLViewOnDestroy, updateAncestorTraversalFlagsOnAttach} from './util/ // the multiple @extends by making the annotation @implements instead interface ChangeDetectorRefInterface extends ChangeDetectorRef {} -export class ViewRef implements EmbeddedViewRef, InternalViewRef, ChangeDetectorRefInterface { +export class ViewRef implements EmbeddedViewRef, ChangeDetectorRefInterface { private _appRef: ViewRefTracker|null = null; private _attachedToViewContainer = false; @@ -57,7 +57,7 @@ export class ViewRef implements EmbeddedViewRef, InternalViewRef, ChangeDe * * This may be different from `_lView` if the `_cdRefInjectingView` is an embedded view. */ - private _cdRefInjectingView?: LView) {} + private _cdRefInjectingView?: LView, private readonly notifyErrorHandler = true) {} get context(): T { return this._lView[CONTEXT] as unknown as T; @@ -284,7 +284,8 @@ export class ViewRef implements EmbeddedViewRef, InternalViewRef, ChangeDe * See {@link ChangeDetectorRef#detach} for more information. */ detectChanges(): void { - detectChangesInternal(this._lView[TVIEW], this._lView, this.context as unknown as {}); + detectChangesInternal( + this._lView[TVIEW], this._lView, this.context as unknown as {}, this.notifyErrorHandler); } /** @@ -295,7 +296,8 @@ export class ViewRef implements EmbeddedViewRef, InternalViewRef, ChangeDe */ checkNoChanges(): void { if (ngDevMode) { - checkNoChangesInternal(this._lView[TVIEW], this._lView, this.context as unknown as {}); + checkNoChangesInternal( + this._lView[TVIEW], this._lView, this.context as unknown as {}, this.notifyErrorHandler); } } @@ -322,30 +324,3 @@ export class ViewRef implements EmbeddedViewRef, InternalViewRef, ChangeDe this._appRef = appRef; } } - -/** @internal */ -export class RootViewRef extends ViewRef { - constructor(public _view: LView) { - super(_view); - } - - override detectChanges(): void { - const lView = this._view; - const tView = lView[TVIEW]; - const context = lView[CONTEXT]; - detectChangesInternal(tView, lView, context, false); - } - - override checkNoChanges(): void { - if (ngDevMode) { - const lView = this._view; - const tView = lView[TVIEW]; - const context = lView[CONTEXT]; - checkNoChangesInternal(tView, lView, context, false); - } - } - - override get context(): T { - return null!; - } -} diff --git a/packages/core/test/acceptance/view_ref_spec.ts b/packages/core/test/acceptance/view_ref_spec.ts index 224cb05d23d..a0716f5178e 100644 --- a/packages/core/test/acceptance/view_ref_spec.ts +++ b/packages/core/test/acceptance/view_ref_spec.ts @@ -7,7 +7,7 @@ */ import {ApplicationRef, ChangeDetectorRef, Component, ComponentRef, createComponent, ElementRef, EmbeddedViewRef, EnvironmentInjector, Injector, TemplateRef, ViewChild, ViewContainerRef} from '@angular/core'; -import {InternalViewRef} from '@angular/core/src/linker/view_ref'; +import {ViewRef as InternalViewRef} from '@angular/core/src/render3/view_ref'; import {TestBed} from '@angular/core/testing'; @@ -25,12 +25,12 @@ describe('ViewRef', () => { create() { this.componentRef = createComponent(DynamicComponent, {environmentInjector: this.injector}); - (this.componentRef.hostView as InternalViewRef).attachToAppRef(this.appRef); + (this.componentRef.hostView as InternalViewRef).attachToAppRef(this.appRef); document.body.appendChild(this.componentRef.instance.elRef.nativeElement); } destroy() { - (this.componentRef.hostView as InternalViewRef).detachFromAppRef(); + (this.componentRef.hostView as InternalViewRef).detachFromAppRef(); } } @@ -54,7 +54,7 @@ describe('ViewRef', () => { @Component({template: ''}) class App { constructor(changeDetectorRef: ChangeDetectorRef) { - (changeDetectorRef as InternalViewRef).onDestroy(() => called = true); + (changeDetectorRef as InternalViewRef).onDestroy(() => called = true); } } diff --git a/packages/core/test/bundling/animations-standalone/bundle.golden_symbols.json b/packages/core/test/bundling/animations-standalone/bundle.golden_symbols.json index 4ef519fa3f2..0c37e3c53a9 100644 --- a/packages/core/test/bundling/animations-standalone/bundle.golden_symbols.json +++ b/packages/core/test/bundling/animations-standalone/bundle.golden_symbols.json @@ -443,9 +443,6 @@ { "name": "RendererStyleFlags2" }, - { - "name": "RootViewRef" - }, { "name": "RuntimeError" }, @@ -815,9 +812,6 @@ { "name": "detectChangesInViewIfAttached" }, - { - "name": "detectChangesInternal" - }, { "name": "diPublicInInjector" }, diff --git a/packages/core/test/bundling/animations/bundle.golden_symbols.json b/packages/core/test/bundling/animations/bundle.golden_symbols.json index f10f1fc6a7a..824fe429afa 100644 --- a/packages/core/test/bundling/animations/bundle.golden_symbols.json +++ b/packages/core/test/bundling/animations/bundle.golden_symbols.json @@ -485,9 +485,6 @@ { "name": "RootComponent" }, - { - "name": "RootViewRef" - }, { "name": "RuntimeError" }, @@ -878,9 +875,6 @@ { "name": "detectChangesInViewIfAttached" }, - { - "name": "detectChangesInternal" - }, { "name": "diPublicInInjector" }, diff --git a/packages/core/test/bundling/cyclic_import/bundle.golden_symbols.json b/packages/core/test/bundling/cyclic_import/bundle.golden_symbols.json index 1ed3c3cb355..a4c46fa0a2e 100644 --- a/packages/core/test/bundling/cyclic_import/bundle.golden_symbols.json +++ b/packages/core/test/bundling/cyclic_import/bundle.golden_symbols.json @@ -368,9 +368,6 @@ { "name": "RendererStyleFlags2" }, - { - "name": "RootViewRef" - }, { "name": "RuntimeError" }, @@ -659,9 +656,6 @@ { "name": "detectChangesInViewIfAttached" }, - { - "name": "detectChangesInternal" - }, { "name": "diPublicInInjector" }, diff --git a/packages/core/test/bundling/defer/bundle.golden_symbols.json b/packages/core/test/bundling/defer/bundle.golden_symbols.json index 29c291a0362..22cfd537071 100644 --- a/packages/core/test/bundling/defer/bundle.golden_symbols.json +++ b/packages/core/test/bundling/defer/bundle.golden_symbols.json @@ -419,9 +419,6 @@ { "name": "RendererStyleFlags2" }, - { - "name": "RootViewRef" - }, { "name": "RuntimeError" }, @@ -749,9 +746,6 @@ { "name": "detectChangesInViewIfAttached" }, - { - "name": "detectChangesInternal" - }, { "name": "diPublicInInjector" }, diff --git a/packages/core/test/bundling/forms_reactive/bundle.golden_symbols.json b/packages/core/test/bundling/forms_reactive/bundle.golden_symbols.json index 0eaab905f8b..5a6cba9c057 100644 --- a/packages/core/test/bundling/forms_reactive/bundle.golden_symbols.json +++ b/packages/core/test/bundling/forms_reactive/bundle.golden_symbols.json @@ -506,9 +506,6 @@ { "name": "RootComponent" }, - { - "name": "RootViewRef" - }, { "name": "RuntimeError" }, @@ -902,9 +899,6 @@ { "name": "detectChangesInViewIfAttached" }, - { - "name": "detectChangesInternal" - }, { "name": "diPublicInInjector" }, diff --git a/packages/core/test/bundling/forms_template_driven/bundle.golden_symbols.json b/packages/core/test/bundling/forms_template_driven/bundle.golden_symbols.json index da0892f52eb..e99ef7be74e 100644 --- a/packages/core/test/bundling/forms_template_driven/bundle.golden_symbols.json +++ b/packages/core/test/bundling/forms_template_driven/bundle.golden_symbols.json @@ -494,9 +494,6 @@ { "name": "RootComponent" }, - { - "name": "RootViewRef" - }, { "name": "RuntimeError" }, @@ -872,9 +869,6 @@ { "name": "detectChangesInViewIfAttached" }, - { - "name": "detectChangesInternal" - }, { "name": "diPublicInInjector" }, diff --git a/packages/core/test/bundling/hello_world/bundle.golden_symbols.json b/packages/core/test/bundling/hello_world/bundle.golden_symbols.json index 2cda661aa13..08a2573d7b6 100644 --- a/packages/core/test/bundling/hello_world/bundle.golden_symbols.json +++ b/packages/core/test/bundling/hello_world/bundle.golden_symbols.json @@ -281,9 +281,6 @@ { "name": "RendererFactory2" }, - { - "name": "RootViewRef" - }, { "name": "RuntimeError" }, @@ -518,9 +515,6 @@ { "name": "detectChangesInViewIfAttached" }, - { - "name": "detectChangesInternal" - }, { "name": "diPublicInInjector" }, diff --git a/packages/core/test/bundling/hydration/bundle.golden_symbols.json b/packages/core/test/bundling/hydration/bundle.golden_symbols.json index faf1d854f0c..60a7798efc3 100644 --- a/packages/core/test/bundling/hydration/bundle.golden_symbols.json +++ b/packages/core/test/bundling/hydration/bundle.golden_symbols.json @@ -428,9 +428,6 @@ { "name": "RendererStyleFlags2" }, - { - "name": "RootViewRef" - }, { "name": "RuntimeError" }, @@ -743,9 +740,6 @@ { "name": "detectChangesInViewIfAttached" }, - { - "name": "detectChangesInternal" - }, { "name": "diPublicInInjector" }, diff --git a/packages/core/test/bundling/router/bundle.golden_symbols.json b/packages/core/test/bundling/router/bundle.golden_symbols.json index 08c3928266a..3da6ad301f0 100644 --- a/packages/core/test/bundling/router/bundle.golden_symbols.json +++ b/packages/core/test/bundling/router/bundle.golden_symbols.json @@ -629,9 +629,6 @@ { "name": "ResolveStart" }, - { - "name": "RootViewRef" - }, { "name": "RouteConfigLoadEnd" }, @@ -1172,9 +1169,6 @@ { "name": "detectChangesInViewIfAttached" }, - { - "name": "detectChangesInternal" - }, { "name": "diPublicInInjector" }, diff --git a/packages/core/test/bundling/standalone_bootstrap/bundle.golden_symbols.json b/packages/core/test/bundling/standalone_bootstrap/bundle.golden_symbols.json index a7988d5bc33..0a87cc24fdd 100644 --- a/packages/core/test/bundling/standalone_bootstrap/bundle.golden_symbols.json +++ b/packages/core/test/bundling/standalone_bootstrap/bundle.golden_symbols.json @@ -332,9 +332,6 @@ { "name": "RendererStyleFlags2" }, - { - "name": "RootViewRef" - }, { "name": "RuntimeError" }, @@ -590,9 +587,6 @@ { "name": "detectChangesInViewIfAttached" }, - { - "name": "detectChangesInternal" - }, { "name": "diPublicInInjector" }, diff --git a/packages/core/test/bundling/todo/bundle.golden_symbols.json b/packages/core/test/bundling/todo/bundle.golden_symbols.json index 8f476765fec..4d7b68f4aba 100644 --- a/packages/core/test/bundling/todo/bundle.golden_symbols.json +++ b/packages/core/test/bundling/todo/bundle.golden_symbols.json @@ -395,9 +395,6 @@ { "name": "RendererStyleFlags2" }, - { - "name": "RootViewRef" - }, { "name": "RuntimeError" }, @@ -788,9 +785,6 @@ { "name": "detectChangesInViewIfAttached" }, - { - "name": "detectChangesInternal" - }, { "name": "diPublicInInjector" },