@@ -21,21 +21,28 @@ export function createRouterState(
2121 routeReuseStrategy : RouteReuseStrategy ,
2222 curr : RouterStateSnapshot ,
2323 prevState : RouterState ,
24- ) : RouterState {
25- const root = createNode ( routeReuseStrategy , curr . _root , prevState ? prevState . _root : undefined ) ;
26- return new RouterState ( root , curr ) ;
24+ ) : { newlyCreatedRoutes : Set < ActivatedRoute > ; state : RouterState } {
25+ const newlyCreatedRoutes = new Set < ActivatedRoute > ( ) ;
26+ const root = createNode (
27+ routeReuseStrategy ,
28+ curr . _root ,
29+ prevState ? prevState . _root : undefined ,
30+ newlyCreatedRoutes ,
31+ ) ;
32+ return { newlyCreatedRoutes, state : new RouterState ( root , curr ) } ;
2733}
2834
2935function createNode (
3036 routeReuseStrategy : RouteReuseStrategy ,
3137 curr : TreeNode < ActivatedRouteSnapshot > ,
32- prevState ?: TreeNode < ActivatedRoute > ,
38+ prevState : TreeNode < ActivatedRoute > | undefined ,
39+ newlyCreatedRoutes : Set < ActivatedRoute > ,
3340) : TreeNode < ActivatedRoute > {
3441 // reuse an activated route that is currently displayed on the screen
3542 if ( prevState && routeReuseStrategy . shouldReuseRoute ( curr . value , prevState . value . snapshot ) ) {
3643 const value = prevState . value ;
3744 value . _futureSnapshot = curr . value ;
38- const children = createOrReuseChildren ( routeReuseStrategy , curr , prevState ) ;
45+ const children = createOrReuseChildren ( routeReuseStrategy , curr , prevState , newlyCreatedRoutes ) ;
3946 return new TreeNode < ActivatedRoute > ( value , children ) ;
4047 } else {
4148 if ( routeReuseStrategy . shouldAttach ( curr . value ) ) {
@@ -44,13 +51,18 @@ function createNode(
4451 if ( detachedRouteHandle !== null ) {
4552 const tree = ( detachedRouteHandle as DetachedRouteHandleInternal ) . route ;
4653 tree . value . _futureSnapshot = curr . value ;
47- tree . children = curr . children . map ( ( c ) => createNode ( routeReuseStrategy , c ) ) ;
54+ tree . children = curr . children . map ( ( c ) =>
55+ createNode ( routeReuseStrategy , c , undefined , newlyCreatedRoutes ) ,
56+ ) ;
4857 return tree ;
4958 }
5059 }
5160
5261 const value = createActivatedRoute ( curr . value ) ;
53- const children = curr . children . map ( ( c ) => createNode ( routeReuseStrategy , c ) ) ;
62+ newlyCreatedRoutes . add ( value ) ;
63+ const children = curr . children . map ( ( c ) =>
64+ createNode ( routeReuseStrategy , c , undefined , newlyCreatedRoutes ) ,
65+ ) ;
5466 return new TreeNode < ActivatedRoute > ( value , children ) ;
5567 }
5668}
@@ -59,14 +71,15 @@ function createOrReuseChildren(
5971 routeReuseStrategy : RouteReuseStrategy ,
6072 curr : TreeNode < ActivatedRouteSnapshot > ,
6173 prevState : TreeNode < ActivatedRoute > ,
74+ newlyCreatedRoutes : Set < ActivatedRoute > ,
6275) {
6376 return curr . children . map ( ( child ) => {
6477 for ( const p of prevState . children ) {
6578 if ( routeReuseStrategy . shouldReuseRoute ( child . value , p . value . snapshot ) ) {
66- return createNode ( routeReuseStrategy , child , p ) ;
79+ return createNode ( routeReuseStrategy , child , p , newlyCreatedRoutes ) ;
6780 }
6881 }
69- return createNode ( routeReuseStrategy , child ) ;
82+ return createNode ( routeReuseStrategy , child , undefined , newlyCreatedRoutes ) ;
7083 } ) ;
7184}
7285
0 commit comments