2016-07-28 5 views
4

В настоящее время я создаю библиотеку компонентов с угловым 2, чтобы будущие проекты пользовательского интерфейса могли совместно использовать код, который реализует стандартные функции. Одним из моих требований является то, что этим приложениям пользовательского интерфейса нужны некоторые данные с сервера при их запуске. Я хотел инкапсулировать это в свою библиотеку.Асинхронные HTTP-вызовы во время начальной загрузки

Итак, когда я ввожу сервис из своей библиотеки в свое приложение, я хотел бы выполнить http-вызов конечной точки сервера, чтобы получить некоторую конфигурацию. Это может произойти после создания экземпляра.

Я не уверен, является ли это хорошей идеей или нет, будет ли процедура Angular 2 bootstrap ждать, пока введенные службы завершат 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 для более подробной информации:

Смежные вопросы