Skip to content

Commit df19952

Browse files
committed
chore(portals): replace deprecated DynamicComponentLoader (#501)
1 parent 34b210c commit df19952

File tree

4 files changed

+23
-20
lines changed

4 files changed

+23
-20
lines changed

src/core/overlay/overlay.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {
2-
DynamicComponentLoader,
2+
ComponentResolver,
33
OpaqueToken,
44
Inject,
55
Injectable,
@@ -39,7 +39,7 @@ let defaultState = new OverlayState();
3939
export class Overlay {
4040
constructor(
4141
@Inject(OVERLAY_CONTAINER_TOKEN) private _overlayContainerElement: HTMLElement,
42-
private _dynamicComponentLoader: DynamicComponentLoader,
42+
private _componentResolver: ComponentResolver,
4343
private _positionBuilder: OverlayPositionBuilder) {
4444
}
4545

@@ -82,7 +82,7 @@ export class Overlay {
8282
private _createPortalHost(pane: HTMLElement): DomPortalHost {
8383
return new DomPortalHost(
8484
pane,
85-
this._dynamicComponentLoader);
85+
this._componentResolver);
8686
}
8787

8888
/**

src/core/portal/dom-portal-host.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {DynamicComponentLoader, ComponentRef, EmbeddedViewRef} from '@angular/core';
1+
import {ComponentResolver, ComponentRef, EmbeddedViewRef} from '@angular/core';
22
import {BasePortalHost, ComponentPortal, TemplatePortal} from './portal';
33
import {MdComponentPortalAttachedToDomWithoutOriginError} from './portal-errors';
44

@@ -12,18 +12,20 @@ import {MdComponentPortalAttachedToDomWithoutOriginError} from './portal-errors'
1212
export class DomPortalHost extends BasePortalHost {
1313
constructor(
1414
private _hostDomElement: Element,
15-
private _componentLoader: DynamicComponentLoader) {
15+
private _componentResolver: ComponentResolver) {
1616
super();
1717
}
1818

19-
/** Attach the given ComponentPortal to DOM element using the DynamicComponentLoader. */
19+
/** Attach the given ComponentPortal to DOM element using the ComponentResolver. */
2020
attachComponentPortal(portal: ComponentPortal): Promise<ComponentRef<any>> {
2121
if (portal.viewContainerRef == null) {
2222
throw new MdComponentPortalAttachedToDomWithoutOriginError();
2323
}
2424

25-
return this._componentLoader.loadNextToLocation(
26-
portal.component, portal.viewContainerRef).then(ref => {
25+
return this._componentResolver.resolveComponent(portal.component).then(componentFactory => {
26+
let ref = portal.viewContainerRef.createComponent(
27+
componentFactory, portal.viewContainerRef.length, portal.viewContainerRef.parentInjector);
28+
2729
let hostView = <EmbeddedViewRef<any>> ref.hostView;
2830
this._hostDomElement.appendChild(hostView.rootNodes[0]);
2931
this.setDisposeFn(() => ref.destroy());

src/core/portal/portal-directives.ts

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import {
22
ComponentRef,
33
Directive,
44
TemplateRef,
5-
DynamicComponentLoader,
5+
ComponentResolver,
66
ViewContainerRef
77
} from '@angular/core';
88
import {Portal, TemplatePortal, ComponentPortal, BasePortalHost} from './portal';
@@ -45,7 +45,7 @@ export class PortalHostDirective extends BasePortalHost {
4545
private _portal: Portal<any>;
4646

4747
constructor(
48-
private _dynamicComponentLoader: DynamicComponentLoader,
48+
private _componentResolver: ComponentResolver,
4949
private _viewContainerRef: ViewContainerRef) {
5050
super();
5151
}
@@ -58,7 +58,7 @@ export class PortalHostDirective extends BasePortalHost {
5858
this._replaceAttachedPortal(p);
5959
}
6060

61-
/** Attach the given ComponentPortal to this PortlHost using the DynamicComponentLoader. */
61+
/** Attach the given ComponentPortal to this PortlHost using the ComponentResolver. */
6262
attachComponentPortal(portal: ComponentPortal): Promise<ComponentRef<any>> {
6363
portal.setAttachedHost(this);
6464

@@ -68,12 +68,13 @@ export class PortalHostDirective extends BasePortalHost {
6868
portal.viewContainerRef :
6969
this._viewContainerRef;
7070

71-
// Typecast is necessary for Dart transpilation.
72-
return this._dynamicComponentLoader.loadNextToLocation(portal.component, viewContainerRef)
73-
.then(ref => {
74-
this.setDisposeFn(() => ref.destroy());
75-
return ref;
76-
});
71+
return this._componentResolver.resolveComponent(portal.component).then(componentFactory => {
72+
let ref = viewContainerRef.createComponent(
73+
componentFactory, viewContainerRef.length, viewContainerRef.parentInjector);
74+
75+
this.setDisposeFn(() => ref.destroy());
76+
return ref;
77+
});
7778
}
7879

7980
/** Attach the given TemplatePortal to this PortlHost as an embedded View. */

src/core/portal/portal.spec.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
ViewChildren,
1414
QueryList,
1515
ViewContainerRef,
16-
DynamicComponentLoader
16+
ComponentResolver
1717
} from '@angular/core';
1818
import {TemplatePortalDirective, PortalHostDirective} from './portal-directives';
1919
import {Portal, ComponentPortal} from './portal';
@@ -180,12 +180,12 @@ describe('Portals', () => {
180180
});
181181

182182
describe('DomPortalHost', function () {
183-
let componentLoader: DynamicComponentLoader;
183+
let componentLoader: ComponentResolver;
184184
let someViewContainerRef: ViewContainerRef;
185185
let someDomElement: HTMLElement;
186186
let host: DomPortalHost;
187187

188-
beforeEach(inject([DynamicComponentLoader], (dcl: DynamicComponentLoader) => {
188+
beforeEach(inject([ComponentResolver], (dcl: ComponentResolver) => {
189189
componentLoader = dcl;
190190
}));
191191

0 commit comments

Comments
 (0)