这将是一种方法:
excel.module.ts
@NgModule({
declarations: [],
imports: [
CommonModule
],
providers: [ExcelService]
})
export class ExcelModule {
static loaded = false;
}
app.component.ts
export class AppComponent {
constructor (
private compiler: Compiler,
private injector: Injector
) { }
load () {
import('./excel/excel.module')
.then(m => m.ExcelModule)
.then(m => {
console.dir(m.loaded)
return m;
})
.then(m => this.compiler.compileModuleAsync(m).then(r => (m.loaded = true,r)))
.then(factory => {
const module = factory.create(this.injector);
console.dir(module.injector.get(ExcelService))
})
}
}
第一次加载,m.loaded
将false
. 在随后的时间里,它将是true
。有了这个,我们可以确定我们不会多次加载模块。
当然,更简单(并且可能更好)的方法是使用专门的服务来加载模块,例如ModuleLoaderService
,您将有一个Map
对象跟踪加载的模块。
ng-运行演示。