1
- import { RouteReuseStrategy , ActivatedRouteSnapshot , DetachedRouteHandle } from "@angular/router" ;
1
+ import { RouteReuseStrategy , DefaultUrlSerializer , ActivatedRouteSnapshot , DetachedRouteHandle } from "@angular/router" ;
2
2
3
3
export class CustomReuseStrategy implements RouteReuseStrategy {
4
4
5
5
handlers : { [ key : string ] : DetachedRouteHandle } = { } ;
6
6
7
+ calcKey ( route : ActivatedRouteSnapshot ) {
8
+ let next = route ;
9
+ let url = "" ;
10
+ while ( next ) {
11
+ if ( next . url ) {
12
+ url = next . url . join ( '/' ) ;
13
+ }
14
+ next = next . firstChild ;
15
+ }
16
+ console . debug ( 'url' , url ) ;
17
+ return url ;
18
+ }
19
+
7
20
shouldDetach ( route : ActivatedRouteSnapshot ) : boolean {
8
- console . debug ( 'CustomReuseStrategy:shouldDetach' , route ) ;
21
+ // console.debug('CustomReuseStrategy:shouldDetach', route);
9
22
return true ;
10
23
}
11
24
12
25
store ( route : ActivatedRouteSnapshot , handle : DetachedRouteHandle ) : void {
13
- console . debug ( 'CustomReuseStrategy:store' , route , handle ) ;
14
- this . handlers [ route . routeConfig . path ] = handle ;
26
+ //console.debug('CustomReuseStrategy:store', route, handle);
27
+ this . handlers [ this . calcKey ( route ) ] = handle ;
28
+
15
29
}
16
30
17
31
shouldAttach ( route : ActivatedRouteSnapshot ) : boolean {
18
- console . debug ( 'CustomReuseStrategy:shouldAttach' , route ) ;
19
- return ! ! route . routeConfig && ! ! this . handlers [ route . routeConfig . path ] ;
32
+ // console.debug('CustomReuseStrategy:shouldAttach', route);
33
+ return ! ! route . routeConfig && ! ! this . handlers [ this . calcKey ( route ) ] ;
20
34
}
21
35
22
36
retrieve ( route : ActivatedRouteSnapshot ) : DetachedRouteHandle {
23
- console . debug ( 'CustomReuseStrategy:retrieve' , route ) ;
37
+ // console.debug('CustomReuseStrategy:retrieve', route);
24
38
if ( ! route . routeConfig ) return null ;
25
- return this . handlers [ route . routeConfig . path ] ;
39
+ return this . handlers [ this . calcKey ( route ) ] ;
26
40
}
27
41
28
42
shouldReuseRoute ( future : ActivatedRouteSnapshot , curr : ActivatedRouteSnapshot ) : boolean {
29
- console . debug ( 'CustomReuseStrategy:shouldReuseRoute' , future , curr ) ;
30
- return future . routeConfig === curr . routeConfig ;
43
+ // console.debug('CustomReuseStrategy:shouldReuseRoute', future, curr);
44
+ return this . calcKey ( curr ) === this . calcKey ( future ) ;
31
45
}
32
46
33
47
}
0 commit comments