bootstrap 期间的异步 HTTP 调用
Async HTTP calls during bootstrap
我目前正在构建一个 Angular 2 组件库,以便将来的 UI 项目可以共享实现标准功能的代码。我的要求之一是这些 UI 应用程序在启动时需要来自服务器的一些数据。我想将它封装在我的库中。
因此,当我将我的库中的服务注入我的应用程序时,我想对服务器端点执行 http 调用以获取一些配置。这可能在实例化时发生。
我不确定这是否是个好主意,Angular 2 bootstrap 例程是否会等待注入的服务完成 http 调用?
我见过几种不同的方法来异步 bootstrap 一个 Angular 2 应用程序,但我不想将此代码放在我的应用程序中,而是留在我的库中。我试图将这个过程的细节隐藏在我的库中,这样其他开发人员就不会试图破解它。
您可以利用 APP_INITIALIZER
服务。有了它,应用程序将等待返回的承诺在真正开始之前得到解决。
这是一个示例:
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 上的此问题:
我目前正在构建一个 Angular 2 组件库,以便将来的 UI 项目可以共享实现标准功能的代码。我的要求之一是这些 UI 应用程序在启动时需要来自服务器的一些数据。我想将它封装在我的库中。
因此,当我将我的库中的服务注入我的应用程序时,我想对服务器端点执行 http 调用以获取一些配置。这可能在实例化时发生。
我不确定这是否是个好主意,Angular 2 bootstrap 例程是否会等待注入的服务完成 http 调用?
我见过几种不同的方法来异步 bootstrap 一个 Angular 2 应用程序,但我不想将此代码放在我的应用程序中,而是留在我的库中。我试图将这个过程的细节隐藏在我的库中,这样其他开发人员就不会试图破解它。
您可以利用 APP_INITIALIZER
服务。有了它,应用程序将等待返回的承诺在真正开始之前得到解决。
这是一个示例:
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 上的此问题: