2017-09-13 71 views
2

我嘗試使用異步休息調用中的值設置「CoreModule」中的APP_BASE_HREF。 我看不到這是如何完成的,因爲提供方法需要返回一個字符串。Angular 2使用Promise/Observable中的值設置APP_BASE_HREF

例如:

@NgModule({ 
    imports: [ 
     ... 
     HttpModule 
    ], 
    ... 
    providers: [ 
     ... 
     ... 
     BackendRequestClass, 
     { provide: APP_BASE_HREF, useFactory:() =>() => return '/some/path', deps: [], multi: true } 
    ], 
}); 

但是當我從一個Web服務所需要的價值,我不能返回的字符串。 任何想法如何做到這一點?

THX

回答

2

您可以使用APP_INITIALIZER得到提前的路徑,然後使用依賴性如圖Angularjs2 - preload server configuration before the application starts

export function loadConfig(config: ConfigService) =>() => config.load() 

@NgModule({ 
    declarations: [AppComponent], 
    imports: [BrowserModule, 
     routes, 
     FormsModule, 
     HttpModule], 
    providers: [ 
     ConfigService, 
     BackendRequestClass, 
     { provide: APP_INITIALIZER, 
      useFactory: loadConfig, 
      deps: [ConfigService], 
      multi: true }, 
     { provide: APP_BASE_HREF, useFactory: (config) => config.appBaseHref, deps: [ConfigService] } 

    ], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { } 

ConfigService可以注入BackendRequestClassHttp並獲取數據,然後使它可用它的appBaseHref屬性(只是一個例子,它是如何完成的)。

0

我試過你的解決方案。 的問題是,在當時

{ provide: APP_BASE_HREF, useFactory: (config) => config.appBaseHref, deps: [ConfigService] } 

的config.appBaseHref尚未設定。 當我調試我看到的代碼時,APP_INITIALIZERAPP_BASE_HREF的提供者之後執行

這會導致BASE_HREF未設置。