当我的应用程序引导时,我正在Angular应用程序中使用APP_INITIALIZER
来加载配置。从技术上讲,它有效;配置已加载,并且app.module似乎正确构建,但是没有构建任何功能模块,因此无法使用。这是ng build
和APP_INITIALIZER
的输出:
这是没有APP_INITIALIZER
的输出:
这是APP_INITIALIZER
工厂中调用的代码:
// in app.module.ts
function initConfig(configService: AppConfigService) {
return () => configService.loadConfig();
}
// in app-config.service.ts
public loadConfig() {
return this._http.get('./assets/app-config/config.json')
.toPromise()
.then((config: any) => {
this.config = config;
this.configSubject$.next(this.config);
})
}
因此,如您所见,工厂返回了一个Promise,它加载了配置等,但是发生了一些事情,阻止了它构建功能模块。我在工厂中缺少什么东西阻止它加载功能模块吗?
作为测试,我只是在initLoad工厂函数中立即返回true,并且在未构建功能模块的地方也发生了同样的事情。
经过进一步的研究,我相信更准确的说法是,延迟加载的模块是尚未构建的模块。如果某个功能模块不是延迟加载的,则它似乎可以继续构建并按预期工作。
Here's a GitHub repo和演示应用程序,其中将模块设置为延迟加载。如果注释掉providers
中的AppModule
数组并运行ng build
,则会在main
块正下方看到一条有关正在构建的延迟加载模块的行。 。然后,重新添加provider数组并运行ng build
,仅存在main
块。
答案 0 :(得分:2)
似乎不导出initConfig
函数会破坏依赖关系解析算法。
因此只需将其导出:
export function initLoad() {...}