2017-09-13 67 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未设置。