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가 약속에 의해 해결 된 값을 주입하지 않지만 그 자체를 약속한다는 것입니다.
적절한 의존성으로 약속이 해결 될 때까지 각도를 기다려야 만 어떻게 다른 종속성에 주입 할 수 있습니까?
나는 다른 접근 방식을 시도하고 항상 값을 주입 약속 또는 관측입니다. iniector가 리턴 한 타입 팩토리를 무시하는 것처럼. 전체 응용 프로그램이 시작되기 전에 일부 json 파일을로드해야합니다.
나는 문제를 발견했다.
대신 함수를 반환해야 할 때 공장에서 약속을 반환했습니다. 또한 공급자 섹션에서 "다중"인수를 놓쳤습니다. 다음은 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
},
]