import { Injectable } from '@angular/core'; import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router'; import { Observable } from 'rxjs/Observable'; import { HttpClient } from '@angular/common/http'; @Injectable() export class ProjectDashboardService implements Resolve { projects: any[]; widgets: any[]; constructor( private http: HttpClient ) { } /** * Resolve * @param {ActivatedRouteSnapshot} route * @param {RouterStateSnapshot} state * @returns {Observable | Promise | any} */ resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | Promise | any { return new Promise((resolve, reject) => { Promise.all([ this.getProjects(), this.getWidgets() ]).then( () => { resolve(); }, reject ); }); } getProjects(): Promise { return new Promise((resolve, reject) => { this.http.get('api/project-dashboard-projects') .subscribe((response: any) => { this.projects = response; resolve(response); }, reject); }); } getWidgets(): Promise { return new Promise((resolve, reject) => { this.http.get('api/project-dashboard-widgets') .subscribe((response: any) => { this.widgets = response; resolve(response); }, reject); }); } }