projects/rebirth-ng/src/lib/common/router-reuse-strategy.ts
        
Register on AppModule: {provide: RouteReuseStrategy, useClass: RebirthRouterReuseStrategy}; Put {data: {reusable: true}} on reuse router config.
                        Properties | 
                
                        Methods | 
                
| getReusableKey | 
                        getReusableKey:     
                     | 
                
                            Default value : (route: ActivatedRouteSnapshot): string => {
    return route.url.join('/');
  }
                         | 
                    
| handlers | 
                        handlers:     
                     | 
                
                            Type :     literal type
                         | 
                    
                            Default value : {}
                         | 
                    
| isReusable | 
                        isReusable:     
                     | 
                
                            Default value : (route: ActivatedRouteSnapshot): boolean => {
    return route.data && route.data.reusable;
  }
                         | 
                    
| retrieve | ||||||
retrieve(route: ActivatedRouteSnapshot)
                     | 
                ||||||
| 
                             
                                    Parameters :
                                     
                            
 
                                Returns :      
                                DetachedRouteHandle
                             | 
                
| shouldAttach | ||||||
shouldAttach(route: ActivatedRouteSnapshot)
                     | 
                ||||||
| 
                             
                                    Parameters :
                                     
                            
 
                                Returns :      
                                boolean
                             | 
                
| shouldDetach | ||||||
shouldDetach(route: ActivatedRouteSnapshot)
                     | 
                ||||||
| 
                             
                                    Parameters :
                                     
                            
 
                                Returns :      
                                boolean
                             | 
                
| shouldReuseRoute | |||||||||
shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot)
                     | 
                |||||||||
| 
                             
                                    Parameters :
                                     
                            
 
                                Returns :      
                                boolean
                             | 
                
| store | |||||||||
store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle)
                     | 
                |||||||||
| 
                             
                                    Parameters :
                                     
                            
 
                                Returns :      
                                void
                             | 
                
import { RouteReuseStrategy, DetachedRouteHandle, ActivatedRouteSnapshot } from '@angular/router';
/**
 * Register on AppModule: {provide: RouteReuseStrategy, useClass: RebirthRouterReuseStrategy};
 * Put {data: {reusable: true}} on reuse router config.
 */
export class RebirthRouterReuseStrategy implements RouteReuseStrategy {
  handlers: { [key: string]: DetachedRouteHandle } = {};
  isReusable = (route: ActivatedRouteSnapshot): boolean => {
    return route.data && route.data.reusable;
  }
  getReusableKey = (route: ActivatedRouteSnapshot): string => {
    return route.url.join('/');
  }
  shouldDetach(route: ActivatedRouteSnapshot): boolean {
    return this.isReusable(route);
  }
  store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void {
    this.handlers[this.getReusableKey(route)] = handle;
  }
  shouldAttach(route: ActivatedRouteSnapshot): boolean {
    return !!route.routeConfig && !!this.handlers[this.getReusableKey(route)];
  }
  retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle {
    return this.isReusable(route) && route.routeConfig ? this.handlers[this.getReusableKey(route)] : null;
  }
  shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {
    return future.routeConfig === curr.routeConfig && this.isReusable(future);
  }
}