Skip to content

Commit 7de9f41

Browse files
committed
fix: don't dispose the portal on component destroy
1 parent 1522e8f commit 7de9f41

1 file changed

Lines changed: 16 additions & 6 deletions

File tree

packages/angular/src/lib/detached-loader-utils.ts

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
1-
import { ApplicationRef, ComponentFactoryResolver, ComponentRef, EmbeddedViewRef, Injector, TemplateRef, Type, ViewContainerRef } from '@angular/core';
1+
import {
2+
ApplicationRef,
3+
ComponentFactoryResolver,
4+
ComponentRef,
5+
EmbeddedViewRef,
6+
Injector,
7+
TemplateRef,
8+
Type,
9+
ViewContainerRef,
10+
} from '@angular/core';
211
import { ContentView } from '@nativescript/core';
312
import { DetachedLoader } from './cdk/detached-loader';
413
import { ComponentPortal, NativeScriptDomPortalOutlet, TemplatePortal } from './cdk/portal';
@@ -11,7 +20,11 @@ import { NgViewRef } from './view-refs';
1120
* @param viewContainerRef where the view should live in the angular tree
1221
* @returns reference to the DetachedLoader
1322
*/
14-
export function generateDetachedLoader(resolver: ComponentFactoryResolver, injector: Injector, viewContainerRef?: ViewContainerRef) {
23+
export function generateDetachedLoader(
24+
resolver: ComponentFactoryResolver,
25+
injector: Injector,
26+
viewContainerRef?: ViewContainerRef,
27+
) {
1528
injector = viewContainerRef?.injector || injector;
1629
const detachedFactory = resolver.resolveComponentFactory(DetachedLoader);
1730
const detachedLoaderRef = viewContainerRef?.createComponent(detachedFactory) || detachedFactory.create(injector);
@@ -41,7 +54,7 @@ export function generateNativeScriptView<T>(
4154
* reuse a detachedLoaderRef. This will override viewContainerRef
4255
*/
4356
detachedLoaderRef?: ComponentRef<DetachedLoader>;
44-
}
57+
},
4558
) {
4659
let detachedLoaderRef: ComponentRef<DetachedLoader> = options.detachedLoaderRef;
4760
const reusingDetachedLoader = !!detachedLoaderRef;
@@ -62,9 +75,6 @@ export function generateNativeScriptView<T>(
6275
const parentView = new ContentView();
6376
const portalOutlet = new NativeScriptDomPortalOutlet(parentView, resolver, injector.get(ApplicationRef), injector);
6477
const componentOrTemplateRef: ComponentRef<T> | EmbeddedViewRef<T> = portalOutlet.attach(portal);
65-
componentOrTemplateRef.onDestroy(() => {
66-
portalOutlet.dispose();
67-
});
6878
if (detachedLoaderRef && !reusingDetachedLoader) {
6979
componentOrTemplateRef.onDestroy(() => {
7080
detachedLoaderRef.destroy();

0 commit comments

Comments
 (0)