Как вызвать rest api при загрузке углового приложения 2

Мы хотели бы назвать rest api, когда приложение углового 2 загружается, я имею в виду, прежде всего, что он должен делать с приложением, это вызвать этот api и получить некоторые данные, которые необходимы для приложения.

В любом случае, для этого? Я видел следующую статью, но это было предназначено для бета-версии Angular 2

Пример кода на основе Angular 2 beta или rc

Чтение данных до запуска приложения

Вы можете использовать APP_INITIALIZER для вызова метода службы при загрузке. Вам потребуется определить provider для него в вашем AppModule .

Вот пример того, как это сделать.

StartupService ( startup.service.ts )

 import { Injectable } from '@angular/core'; import { Http, Response } from '@angular/http'; import 'rxjs/add/operator/map'; import 'rxjs/add/operator/toPromise'; @Injectable() export class StartupService { private _startupData: any; constructor(private http: Http) { } // This is the method you want to call at bootstrap // Important: It should return a Promise load(): Promise { this._startupData = null; return this.http .get('REST_API_URL') .map((res: Response) => res.json()) .toPromise() .then((data: any) => this._startupData = data) .catch((err: any) => Promise.resolve()); } get startupData(): any { return this._startupData; } } 

AppModule ( app.module.ts )

 import { BrowserModule } from '@angular/platform-browser'; import { NgModule, APP_INITIALIZER } from '@angular/core'; import { StartupService } from './startup.service'; // ... // Other imports that you may require // ... export function startupServiceFactory(startupService: StartupService): Function { return () => startupService.load(); } @NgModule({ declarations: [ AppComponent, // ... // Other components & directives ], imports: [ BrowserModule, // .. // Other modules ], providers: [ StartupService, { // Provider for APP_INITIALIZER provide: APP_INITIALIZER, useFactory: startupServiceFactory, deps: [StartupService], multi: true } ], bootstrap: [AppComponent] }) export class AppModule { } 

EDIT ( Как справиться с сбоем службы запуска ):

AppComponent ( app.component.ts )

 import { Component, OnInit } from '@angular/core'; import { Router } from '@angular/router'; import { StartupService } from './startup.service'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.scss'] }) export class AppComponent implements OnInit { constructor(private router: Router, private startup: StartupService ) { } ngOnInit() { // If there is no startup data received (maybe an error!) // navigate to error route if (!this.startup.startupData) { this.router.navigate(['error'], { replaceUrl: true }); } } } 

Одна вещь, с которой я столкнулся, используя ответ, предоставленный Santanu, заключается в том, что он не будет работать, если только StartupService не определен в провайдерах перед APP_INITIALIZER . Используя Angular 4.x , поэтому часть поставщиков выглядит так в моем случае:

  providers: [ UserService, { provide: APP_INITIALIZER, useFactory: userServiceFactory, deps: [UserService], multi: true } 

Вот статья, которая объясняет APP_INITIALIZER гораздо более подробно, а также показывает, как ее угловое использование.

  • Обнаружение изменения углового2: ngOnИзменяет не стрельбу по вложенному объекту
  • Угловое изменение на каждом нажатии клавиши
  • Изменение заголовка страницы с помощью нового маршрутизатора «Угловой 2»
  • Угловая загрузка файла
  • Как динамически добавлять и удалять поля формы в Angular 2
  • Строки таблицы Angular2 как компонент
  • Экран загрузки предварительной загрузки для Angular2
  • Угловое redirect на страницу входа в систему
  • Динамически добавлять слушателя событий в Angular 2
  • Угловой провайдер для NameService
  • Как связать raw html в Angular2
  • Давайте будем гением компьютера.