@@ -3,16 +3,16 @@ import {isBlank, isPresent} from '@angular/core/src/facade/lang';
33import { StringMapWrapper } from '@angular/core/src/facade/collection' ;
44
55import {
6- Attribute , DynamicComponentLoader , ComponentRef ,
6+ Attribute , ComponentRef ,
77 ViewContainerRef , ViewChild , ElementRef ,
88 ReflectiveInjector , provide , Type ,
9- Component , Inject
9+ Component , Inject , DynamicComponentLoader , ComponentResolver
1010} from '@angular/core' ;
1111
1212import * as routerHooks from '@angular/router-deprecated/src/lifecycle/lifecycle_annotations' ;
1313import { hasLifecycleHook } from '@angular/router-deprecated/src/lifecycle/route_lifecycle_reflector' ;
1414
15- import { Router , RouterOutlet , RouteData , RouteParams , ComponentInstruction ,
15+ import { Router , RouterOutlet , RouteData , RouteParams , ComponentInstruction ,
1616 OnActivate , OnDeactivate , OnReuse , CanReuse } from '@angular/router-deprecated' ;
1717import { LocationStrategy } from '@angular/common' ;
1818import { topmost } from "ui/frame" ;
@@ -78,12 +78,13 @@ export class PageRouterOutlet extends RouterOutlet {
7878
7979 constructor (
8080 private containerRef : ViewContainerRef ,
81- private loader : DynamicComponentLoader ,
81+ private compiler : ComponentResolver ,
8282 private parentRouter : Router ,
8383 @Attribute ( 'name' ) nameAttr : string ,
8484 private location : NSLocationStrategy ,
85+ loader : DynamicComponentLoader ,
8586 @Inject ( DEVICE ) device : Device
86- ) {
87+ ) {
8788 super ( containerRef , loader , parentRouter , nameAttr ) ;
8889 this . viewUtil = new ViewUtil ( device ) ;
8990 }
@@ -135,20 +136,25 @@ export class PageRouterOutlet extends RouterOutlet {
135136 if ( this . isInitalPage ) {
136137 log ( "PageRouterOutlet.activate() inital page - just load component: " + componentType . name ) ;
137138 this . isInitalPage = false ;
138- resultPromise = this . loader . loadNextToLocation ( componentType , this . containerRef , ReflectiveInjector . resolve ( providersArray ) ) ;
139+ resultPromise = this . compiler . resolveComponent ( componentType ) . then ( ( componentFactory ) => {
140+ const childInjector = ReflectiveInjector . resolveAndCreate ( providersArray , this . containerRef . parentInjector ) ;
141+ return this . containerRef . createComponent ( componentFactory , this . containerRef . length , childInjector , null ) ;
142+ } ) ;
139143 } else {
140144 log ( "PageRouterOutlet.activate() forward navigation - create detached loader in the loader container: " + componentType . name ) ;
141145
142146 const page = new Page ( ) ;
143147 providersArray . push ( provide ( Page , { useValue : page } ) ) ;
144- resultPromise = this . loader . loadNextToLocation ( DetachedLoader , this . childContainerRef , ReflectiveInjector . resolve ( providersArray ) )
145- . then ( ( pageComponentRef ) => {
146- loaderRef = pageComponentRef ;
147- return ( < DetachedLoader > loaderRef . instance ) . loadComponent ( componentType ) ;
148- } )
149- . then ( ( actualCoponenetRef ) => {
150- return this . loadComponentInPage ( page , actualCoponenetRef ) ;
151- } )
148+ const childInjector = ReflectiveInjector . resolveAndCreate ( providersArray , this . containerRef . parentInjector ) ;
149+ 150+ resultPromise = this . compiler . resolveComponent ( DetachedLoader ) . then ( ( componentFactory ) => {
151+ loaderRef = this . childContainerRef . createComponent ( componentFactory , this . childContainerRef . length , childInjector , null ) ;
152+ 153+ return ( < DetachedLoader > loaderRef . instance ) . loadComponent ( componentType )
154+ . then ( ( actualCoponenetRef ) => {
155+ return this . loadComponentInPage ( page , actualCoponenetRef ) ;
156+ } ) ;
157+ } ) ;
152158 }
153159
154160 return resultPromise . then ( ( componentRef ) => {
0 commit comments