我使用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文件
我发现了一个问题.
当我需要返回功能时,我正从工厂返回一个承诺.我也错过了提供者部分的“多”论证.这是更新的工厂,与APP_INITIALIZER一起使用:
export function ConfigFactory(config:ConfigService,http:Http):Function { return () => config.load(http); }
在模块中:
providers: [ ConfigService,{ provide: APP_INITIALIZER,deps: [ConfigService,Http],multi: true },]