@@ -93,22 +93,24 @@ export class RouterExtensions {
9393 const outletsToBack : Array < Outlet > = [ ] ;
9494 const rootRoute : ActivatedRoute = this . router . routerState . root ;
9595 let outlets = options . outlets ;
96- let relativeRoute = options . relativeTo ;
96+ let relativeRoute = options . relativeTo || rootRoute ;
9797
98- if ( ! outlets && relativeRoute ) {
99- outlets = [ relativeRoute . outlet ] ;
100- relativeRoute = relativeRoute . parent || rootRoute ;
101- } else if ( ! relativeRoute ) {
102- relativeRoute = rootRoute ;
98+ const relativeRouteOutlet = this . findOutletByRoute ( relativeRoute ) ;
99+ const isNSEmptyOutlet = relativeRouteOutlet && relativeRouteOutlet . isNSEmptyOutlet ;
100+
101+ // Lazy named outlet has added 'primary' inner NSEmptyOutlet child.
102+ // Take parent route when `relativeTo` option points to the outer named outlet.
103+ if ( isNSEmptyOutlet && relativeRoute . outlet !== "primary" ) {
104+ relativeRoute = relativeRoute . parent || relativeRoute ;
103105 }
104106
105- for ( let index = 0 ; index < relativeRoute . children . length ; index ++ ) {
106- const currentRoute = relativeRoute . children [ index ] ;
107+ const routesToMatch = outlets ? relativeRoute . children : [ relativeRoute ] ;
108+ outlets = outlets || [ relativeRoute . outlet ] ;
107109
110+ for ( let index = 0 ; index < routesToMatch . length ; index ++ ) {
111+ const currentRoute = routesToMatch [ index ] ;
108112 if ( outlets . some ( currentOutlet => currentOutlet === currentRoute . outlet ) ) {
109- const currentRouteSnapshop = findTopActivatedRouteNodeForOutlet ( currentRoute . snapshot ) ;
110- const outletKey = this . locationStrategy . getRouteFullPath ( currentRouteSnapshop ) ;
111- let outlet = this . locationStrategy . findOutletByKey ( outletKey ) ;
113+ const outlet = this . findOutletByRoute ( currentRoute ) ;
112114
113115 if ( outlet ) {
114116 outletsToBack . push ( outlet ) ;
@@ -118,4 +120,14 @@ export class RouterExtensions {
118120
119121 return { outletsToBack : outletsToBack , outlets : outlets } ;
120122 }
123+
124+ private findOutletByRoute ( currentRoute : ActivatedRoute ) : Outlet {
125+ let outlet ;
126+
127+ const currentRouteSnapshop = findTopActivatedRouteNodeForOutlet ( currentRoute . snapshot ) ;
128+ const outletKey = this . locationStrategy . getRouteFullPath ( currentRouteSnapshop ) ;
129+ outlet = this . locationStrategy . findOutletByKey ( outletKey ) ;
130+
131+ return outlet ;
132+ }
121133}
0 commit comments