2016-07-28 105 views
4

我目前正在構建一個Angular 2組件庫,以便將來的UI項目可以共享實現標準功能的代碼。我的一個要求是這些UI應用程序在啓動時需要來自服務器的一些數據。我想把它封裝在我的庫中。引導期間的異步HTTP調用

因此,當我從我的庫注入服務到我的應用程序時,我想對服務器端點執行http調用以獲得某些配置。這可能在實例化時發生。

我不確定這是不是一個好主意,Angular 2引導例程會等待注入服務完成http調用嗎?

我已經看到了幾種不同的方式來異步引導Angular 2應用程序,但我不想讓這些代碼在我的應用程序中,而是留在我的庫中。我試圖在我的庫中隱藏這個過程的細節,所以其他開發人員不會試圖破解它。

回答

3

您可以利用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上查看此問題的詳細信息: