9

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 파일을로드해야합니다.


1 답변


5

나는 문제를 발견했다.

대신 함수를 반환해야 할 때 공장에서 약속을 반환했습니다. 또한 공급자 섹션에서 "다중"인수를 놓쳤습니다. 다음은 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
    },
]


  • 이 값을 다른 구성 요소에서 어떻게 사용할 수 있습니까? plnkr.co를 사용하여 예제를 보내주십시오. - gtzinos
  • 항상 다음과 같이 사용하십시오 : 생성자 (private configService : ConfigService) {}. 문제없이 주입 할 수 있습니다. - Mariusz.v7

연결된 질문


관련된 질문

최근 질문