Skip to content

Commit b5abf25

Browse files
committed
chore: allow reusing a detachedLoaderRef
1 parent 5e89ab1 commit b5abf25

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

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

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,20 @@ export function generateNativeScriptView<T>(
3737
viewContainerRef?: ViewContainerRef;
3838
injector: Injector;
3939
keepNativeViewAttached?: boolean;
40+
/**
41+
* reuse a detachedLoaderRef. This will override viewContainerRef
42+
*/
43+
detachedLoaderRef?: ComponentRef<DetachedLoader>;
4044
}
4145
) {
46+
let detachedLoaderRef: ComponentRef<DetachedLoader> = options.detachedLoaderRef;
47+
const reusingDetachedLoader = !!detachedLoaderRef;
48+
if (reusingDetachedLoader) {
49+
options.viewContainerRef = detachedLoaderRef.instance.vc;
50+
}
4251
const injector = options.viewContainerRef?.injector || options.injector;
4352
const resolver = options.resolver || injector.get(ComponentFactoryResolver);
44-
let detachedLoaderRef: ComponentRef<DetachedLoader>;
45-
if (options.viewContainerRef || typeOrTemplate instanceof TemplateRef) {
53+
if (!detachedLoaderRef && (options.viewContainerRef || typeOrTemplate instanceof TemplateRef)) {
4654
detachedLoaderRef = generateDetachedLoader(resolver, injector, options.viewContainerRef);
4755
}
4856
let portal: ComponentPortal<T> | TemplatePortal<T>;
@@ -54,9 +62,11 @@ export function generateNativeScriptView<T>(
5462
const parentView = new ContentView();
5563
const portalOutlet = new NativeScriptDomPortalOutlet(parentView, resolver, injector.get(ApplicationRef), injector);
5664
const componentOrTemplateRef: ComponentRef<T> | EmbeddedViewRef<T> = portalOutlet.attach(portal);
57-
if (detachedLoaderRef) {
65+
componentOrTemplateRef.onDestroy(() => {
66+
portalOutlet.dispose();
67+
});
68+
if (detachedLoaderRef && !reusingDetachedLoader) {
5869
componentOrTemplateRef.onDestroy(() => {
59-
portalOutlet.dispose();
6070
detachedLoaderRef.destroy();
6171
});
6272
}

0 commit comments

Comments
 (0)