Search code examples
angularangular-routingangular-router

How to get route param value in resolve in Angular?


I have a resolve defined:

export class ItemResolve implements Resolve<number> {
    constructor(private activatedRoute: ActivatedRoute) {}
    resolve(): Promise<number> {
        console.log(this.activatedRoute.snapshot.paramMap); // EMPTY OBJECT
        console.log(this.activatedRoute.snapshot.paramMap.get('id'));  // NULL
        console.log(this.activatedRoute.snapshot.data);  // EMPTY OBJECT
        console.log(this.activatedRoute.snapshot.param);  // EMPTY OBJECT
        return new Promise((resolve) => {
            resolve(0);
        });
    }
}

And the route:

{
    path: 'items/edit/:id',
    component: ItemeditorComponent,
    resolve: {item: ItemResolve}
}

In resolve, i always get empty array, null or undefined values, it does not matter what im trying to use. I tried routeParams, parads, data and every possible variations that was available in google i think..

Does anyone have any idea to solve this?


Solution

  • The route method takes a ActivatedRouteSnapShot argument, that you should use:

    interface Resolve<T> {
      resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<T> | Promise<T> | T
    }
    

    https://angular.io/api/router/Resolve

    In your case

    export class ItemResolve implements Resolve<number> {
    
        resolve(route: ActivatedRouteSnapshot): Promise<number> {
          const id = route.paramMap.get('id');
          return new Promise((resolve) => resolve(0));
        }
    }