1
- import { ComponentFactoryResolver , Injectable , Injector , OpaqueToken , Type } from '@angular/core' ;
1
+ import { ComponentFactoryResolver , Injectable , Injector , NgModuleFactory , OpaqueToken , Type } from '@angular/core' ;
2
2
import { DeepLinkConfig } from '../navigation/nav-util' ;
3
3
import { NgModuleLoader } from './ng-module-loader' ;
4
4
@@ -15,6 +15,8 @@ export class ModuleLoader {
15
15
/** @internal */
16
16
_cfrMap = new Map < any , ComponentFactoryResolver > ( ) ;
17
17
18
+ _promiseMap = new Map < string , Promise < NgModuleFactory < any > > > ( ) ;
19
+
18
20
constructor (
19
21
private _ngModuleLoader : NgModuleLoader ,
20
22
private _injector : Injector ) { }
@@ -25,7 +27,15 @@ export class ModuleLoader {
25
27
26
28
const splitString = modulePath . split ( SPLITTER ) ;
27
29
28
- return this . _ngModuleLoader . load ( splitString [ 0 ] , splitString [ 1 ] ) . then ( loadedModule => {
30
+ let promise = this . _promiseMap . get ( modulePath ) ;
31
+ if ( ! promise ) {
32
+ promise = this . _ngModuleLoader . load ( splitString [ 0 ] , splitString [ 1 ] ) ;
33
+ this . _promiseMap . set ( modulePath , promise ) ;
34
+ }
35
+
36
+ return promise . then ( loadedModule => {
37
+ // clear it from the cache
38
+ this . _promiseMap . delete ( modulePath ) ;
29
39
console . timeEnd ( `ModuleLoader, load: ${ modulePath } '` ) ;
30
40
const ref = loadedModule . create ( this . _injector ) ;
31
41
0 commit comments