@@ -93,22 +93,24 @@ export class RouterExtensions {
93
93
const outletsToBack : Array < Outlet > = [ ] ;
94
94
const rootRoute : ActivatedRoute = this . router . routerState . root ;
95
95
let outlets = options . outlets ;
96
- let relativeRoute = options . relativeTo ;
96
+ let relativeRoute = options . relativeTo || rootRoute ;
97
97
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 ;
103
105
}
104
106
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 ] ;
107
109
110
+ for ( let index = 0 ; index < routesToMatch . length ; index ++ ) {
111
+ const currentRoute = routesToMatch [ index ] ;
108
112
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
+ let outlet = this . findOutletByRoute ( currentRoute ) ;
112
114
113
115
if ( outlet ) {
114
116
outletsToBack . push ( outlet ) ;
@@ -118,4 +120,14 @@ export class RouterExtensions {
118
120
119
121
return { outletsToBack : outletsToBack , outlets : outlets } ;
120
122
}
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
+ }
121
133
}
0 commit comments