Angular2 doesn't work Custom Reuse Strategy with Lazy module loading

前端 未结 5 1164
花落未央
花落未央 2020-12-08 16:52

I tried to use custom reuse strategy in my angular2 project, but I found it doesn\'t work with lazy module loading. Anyone who know about this? My project i

5条回答
  •  鱼传尺愫
    2020-12-08 17:38

    use this custom Reuse Strategy file for lazy module loading

    import { ActivatedRouteSnapshot, RouteReuseStrategy, DetachedRouteHandle } from '@angular/router';
    
    /** Interface for object which can store both:
     * An ActivatedRouteSnapshot, which is useful for determining whether or not you should attach a route (see this.shouldAttach)
     * A DetachedRouteHandle, which is offered up by this.retrieve, in the case that you do want to attach the stored route
     */
    interface RouteStorageObject {
        snapshot: ActivatedRouteSnapshot;
        handle: DetachedRouteHandle;
    }
    
    export class CustomReuseStrategy implements RouteReuseStrategy {
    
        handlers: {[key: string]: DetachedRouteHandle} = {};
    
        shouldDetach(route: ActivatedRouteSnapshot): boolean {
            console.debug('CustomReuseStrategy:shouldDetach', route);
            return !!route.data && !!(route.data as any).shouldDetach;
        }
    
        store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void {
            console.debug('CustomReuseStrategy:store', route, handle);
            this.handlers[route.data['key']]= handle;
        }
    
        shouldAttach(route: ActivatedRouteSnapshot): boolean {
            console.debug('CustomReuseStrategy:shouldAttach', route);
            return !!route.data && !!this.handlers[route.data['key']];
        }
    
        retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle {
            console.debug('CustomReuseStrategy:retrieve', route);
            if (!route.data) return null;
            return this.handlers[route.data['key']];
        }
    
        shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {
            console.debug('CustomReuseStrategy:shouldReuseRoute', future, curr);
            return future.data === curr.data;
        }
    
    }
    

提交回复
热议问题