在引导期间执行异步HTTP调用

时间:2016-07-28 19:33:39

标签: angular angular2-services

我目前正在构建一个Angular 2组件库,以便将来的UI项目可以共享实现标准功能的代码。我的一个要求是这些UI应用程序在启动时需要来自服务器的一些数据。我想将它封装在我的库中。

因此,当我从我的库中注入服务到我的应用程序时,我想对服务器端点执行http调用以获得一些配置。这可能在实例化时发生。

我不确定这是不是一个好主意,Angular 2引导程序会等待注入服务来完成http调用吗?

我已经看到了几种不同的异步引导Angular 2应用程序的方法,但是我不希望在我的应用程序中包含这些代码,而是留在我的库中。我试图隐藏我的库中的这个过程的细节,以便其他开发人员不会试图破解它。

1 个答案:

答案 0 :(得分:3)

您可以利用APP_INITIALIZER服务。有了它,应用程序将等待返回的promise在实际启动之前得到解决。

以下是一个示例:

provide(APP_INITIALIZER, {
  useFactory: (service:SomeService) => () => service.init(),
  deps:[GlobalService, HTTP_PROVIDERS], multi: true
})

init方法需要类似的东西:

init():Promise<Site> {
  var promise = this.http.get('config.json').map(res => res.json()).toPromise();
  promise.then(config => this.devServer = config.devServer);
  return promise;
}

有关详细信息,请参阅github上的此问题: