@@ -34,8 +34,7 @@ export class DomPortalHost extends BasePortalHost {
34
34
// If the portal specifies a ViewContainerRef, we will use that as the attachment point
35
35
// for the component (in terms of Angular's component tree, not rendering).
36
36
// When the ViewContainerRef is missing, we use the factory to create the component directly
37
- // and then manually attach the ChangeDetector for that component to the application (which
38
- // happens automatically when using a ViewContainer).
37
+ // and then manually attach the view to the application.
39
38
if ( portal . viewContainerRef ) {
40
39
componentRef = portal . viewContainerRef . createComponent (
41
40
componentFactory ,
@@ -45,39 +44,12 @@ export class DomPortalHost extends BasePortalHost {
45
44
this . setDisposeFn ( ( ) => componentRef . destroy ( ) ) ;
46
45
} else {
47
46
componentRef = componentFactory . create ( portal . injector || this . _defaultInjector ) ;
48
-
49
- // ApplicationRef's attachView and detachView methods are in Angular ^2.3.0 but not before.
50
- // The `else` clause here can be removed once 2.3.0 is released.
51
- if ( ( this . _appRef as any ) [ 'attachView' ] ) {
52
- ( this . _appRef as any ) . attachView ( componentRef . hostView ) ;
53
-
54
- this . setDisposeFn ( ( ) => {
55
- ( this . _appRef as any ) . detachView ( componentRef . hostView ) ;
56
- componentRef . destroy ( ) ;
57
- } ) ;
58
- } else {
59
- // When creating a component outside of a ViewContainer, we need to manually register
60
- // its ChangeDetector with the application. This API is unfortunately not published
61
- // in Angular < 2.3.0. The change detector must also be deregistered when the component
62
- // is destroyed to prevent memory leaks.
63
- let changeDetectorRef = componentRef . changeDetectorRef ;
64
- ( this . _appRef as any ) . registerChangeDetector ( changeDetectorRef ) ;
65
-
66
- this . setDisposeFn ( ( ) => {
67
- ( this . _appRef as any ) . unregisterChangeDetector ( changeDetectorRef ) ;
68
-
69
- // Normally the ViewContainer will remove the component's nodes from the DOM.
70
- // Without a ViewContainer, we need to manually remove the nodes.
71
- let componentRootNode = this . _getComponentRootNode ( componentRef ) ;
72
- if ( componentRootNode . parentNode ) {
73
- componentRootNode . parentNode . removeChild ( componentRootNode ) ;
74
- }
75
-
76
- componentRef . destroy ( ) ;
77
- } ) ;
78
- }
47
+ this . _appRef . attachView ( componentRef . hostView ) ;
48
+ this . setDisposeFn ( ( ) => {
49
+ this . _appRef . detachView ( componentRef . hostView ) ;
50
+ componentRef . destroy ( ) ;
51
+ } ) ;
79
52
}
80
-
81
53
// At this point the component has been instantiated, so we move it to the location in the DOM
82
54
// where we want it to be rendered.
83
55
this . _hostDomElement . appendChild ( this . _getComponentRootNode ( componentRef ) ) ;
0 commit comments