Skip to content

Instantly share code, notes, and snippets.

@aniketmuruskar
Created August 6, 2022 13:29
Show Gist options
  • Save aniketmuruskar/4ca47ec447d971d2c4b0dd3bd599572b to your computer and use it in GitHub Desktop.
Save aniketmuruskar/4ca47ec447d971d2c4b0dd3bd599572b to your computer and use it in GitHub Desktop.
Application resolver service to fetch data on each route transition
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import {
Resolve,
RouterStateSnapshot,
ActivatedRouteSnapshot
} from '@angular/router';
import { map, Observable } from 'rxjs';
import { PageBuilderService } from './page-builder.service';
import { Routes } from './routes';
@Injectable({
providedIn: 'root'
})
export class AppResolver implements Resolve<any> {
constructor(
private http: HttpClient,
private pageBuilderService: PageBuilderService
) {}
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> {
const pageName = route.url[0].path;
const option = {
url: Routes.fetchLocalResponse(pageName),
// url: Routes.fetchServerResponse(pageName)
};
return this.http.get(option.url).pipe(
map(data => this.onSuccess(data))
);
}
private onSuccess(data: any) {
return this.pageBuilderService.buildPage(data.pageElements);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment