我使用Angular2 v2.2.3
我已经使用forRoot()函数创建了通用模块,如下所示:
...
public static forRoot(): ModuleWithProviders {
return {
ngModule: CommonsModule,
providers: [
SomeOtherDependency,
{
provide: ConfigService,
useFactory: ConfigFactory,
deps: [Http]
}
]
};
这是我的ConfigFactory:
export function ConfigFactory(http:Http):Promise<ConfigService> {
return http.get('confg/config.json').map(r => {
return new ConfigService(r);
}).toPromise();
}
我也尝试过返回Promise和Observable。
提供程序中定义的SomeOtherDependency需要ConfigService。问题是Angular没有注入由promise承诺的价值,而是承诺自己。
如何强制angular等待promise以正确的依赖关系解析,然后才将其注入其他依赖项?
我尝试了不同的方法,并且注入的价值总是有希望或可观察的。就像iniector忽略了工厂返回的类型。我需要在整个应用程序启动之前加载一些json文件
答案 0 :(得分:6)
我发现了一个问题。
当我需要返回功能时,我正在从我的工厂返回一个承诺。我也错过了提供者部分的“多”论证。这是更新的工厂,适用于APP_INITIALIZER:
export function ConfigFactory(config:ConfigService, http:Http):Function {
return () => config.load(http);
}
在模块中:
providers: [
ConfigService,
{
provide: APP_INITIALIZER,
useFactory: ConfigFactory,
deps: [ConfigService, Http],
multi: true
},
]