2017-10-25 27 views
1

現在、遅延ロードされているモジュールの一部であるコンポーネントがあります。問題は、ルートが使用されるたびにコンポーネントが再初期化中であることです。遅延ロードされたコンポーネントでCustomReuseStrategyが機能しない

ここは私のルートです。ここ

{ 
    path: 'activities', 
    loadChildren:() => System.import('../containers/activity-engine/activity-engine.module').then((file: any) => { 
     return file.default; 
    }), 
    data: { 
     shouldDetach: true, // Route will be resused. See CustomReuseStrategy. 
     title: null 
    } 
}, 

は、モジュールがロードされるための経路です。

{ 
    path: '', 
    component: ActivityEngineComponent, 
    data: { 
     shouldDetach: true, // Route will be resused. See CustomReuseStrategy. 
     title: null 
    } 
}, 

私はアプリモジュールと遅延ロードされたモジュールに次のクラスをインポートしています、そして、彼らはプロバイダとして適用されている。ここで

import { RouteReuseStrategy } from '@angular/router'; 
import { Location, LocationStrategy, PathLocationStrategy } from '@angular/common'; 
import { CustomReuseStrategy } from '../../shared/router/custom-reuse-strategy'; 

providers: [ 
     { provide: RouteReuseStrategy, useClass: CustomReuseStrategy }, 
     { provide: LocationStrategy, useClass: PathLocationStrategy } 
] 

は私CustomReuseStrategyです:

export class CustomReuseStrategy implements RouteReuseStrategy { 

    handlers: { [key: string]: DetachedRouteHandle } = {}; 

    // Determines if this route (and its subtree) should be detached to be reused later. 
    shouldDetach(route: ActivatedRouteSnapshot): boolean { 

     // We can choose which routes should be resued (i.e. shouldDetach === true) 
     // (https://stackoverflow.com/questions/41483187/conditionally-apply-router-reuse-strategy-for-angular2-routes). 
     return !!route.data && !!(route.data as any).shouldDetach; 
    } 

    store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void { 
     this.handlers[route.routeConfig.path] = handle; 
    } 

    shouldAttach(route: ActivatedRouteSnapshot): boolean { 
     return !!route.routeConfig && !!this.handlers[route.routeConfig.path]; 
    } 

    retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle { 
     if (!route.routeConfig) return null; 
     return this.handlers[route.routeConfig.path]; 
    } 

    shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean { 
     return future.routeConfig === curr.routeConfig; 
    } 

} 

です遅延ロードされたコンポーネントにCustomReuseStrategyを使用しましたか?

+0

あなたの 'CustomResuseStrategy'に' RouteReuseStrategy'を実装する方法としてコードを追加できますか? –

+0

上記の@MadhuRanjan –

+1

の編集済みの質問を参照してください。あなたが遅延読み込みの子である場合、 'shouldDetach:true'は必要ありません。コンポーネントが定義されている場所でのみ必要です。 –

答えて

1

子供が怠惰に読み込まれている場合は、shouldDetach: trueは必要ありません。コンポーネントが定義されている場所でのみ必要です。

関連する問題