Get dynamic data from route with resolve in Angular 4
Create server resolver service
–server-resolver.service.ts
import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot } from "@angular/router";
import { Observable } from "rxjs/Observable";
import { Injectable } from "@angular/core";
import { ServersService } from "app/servers/servers.service";
interface Server {
id:number;
name:string;
status:string;
}
@Injectable()
export class ServerResolver implements Resolve {
constructor(private serversService: ServersService) {}
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable | Promise | Server {
return this.serversService.getServer(+route.params['id']);
}
}
–server.component.ts
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Params, Router, Data } from "@angular/router";
@Component({
selector: 'app-server',
templateUrl: './server.component.html',
styleUrls: ['./server.component.css']
})
export class ServerComponent implements OnInit {
server: {id: number, name: string, status: string};
constructor(private route: ActivatedRoute) { }
ngOnInit() {
this.route.data
.subscribe(
(data: Data) => {
this.server = data['server']
}
)
}
}
–app-routing.module.ts
const appRoutes: Routes = [
{ path: '', redirectTo:'/home', pathMatch:'full'},
{ path: 'home', component: HomeComponent},
{ path: 'users', component: UsersComponent, children: [
{ path: ':id/:name', component: UserComponent},
]},
{ path: 'servers', canActivateChild:[AuthGuard], component: ServersComponent, children: [
{ path: ':id', component: ServerComponent, resolve: {server: ServerResolver}},
{ path: ':id/edit', component: EditServerComponent, canDeactivate: [CanDeactivateGuard]},
]},
{ path: 'error-404', component: ErrorPageComponent, data: {message: 'Page not found!'}},
{ path: '**', redirectTo: '/error-404'}
]