I am trying to get my route params inside a resolve. However it doesn't contain the params but when I use activatedRoute from inside a component it does work. I think it's because the route hasn't changed yet inside the resolve. How do I get this to work?
post.resolve.ts
@Injectable()
export class PostResolver implements Resolve<any> {
slug: any;
constructor(
private activatedRoute: ActivatedRoute,
private memoryService: MemoryService,
) {}
resolve() {
console.log(this.activatedRoute);
this.activatedRoute.params.subscribe(params => {
this.slug = params['slug'];
console.log(this.slug);
return this.memoryService.getPost(this.slug);
})
}
}
app.route.ts
{
path: 'post/:slug',
component: PostComponent,
data: {title: 'Post'},
resolve: {
post: PostResolver
}
},
The first way is through the route snapshot. The route snapshot provides the initial value of the route parameter map (called the paramMap ). You can access the parameters directly without subscribing or adding observable operators. The paramMap provides methods to handle parameter access like get , getAll , and has .
To extract the parameter, you need to make the dynamic parameter in the route path so that you can extract the value of the parameter by parameter name.
To access the route parameters, we use route.snapshot , which is the ActivatedRouteSnapshot that contains information about the active route at that particular moment in time. The URL that matches the route provides the productId . Angular uses the productId to display the details for each unique product.
import { Resolve, ActivatedRouteSnapshot } from '@angular/router';
resolve(route: ActivatedRouteSnapshot) {
console.log(route.data); // {title: "Post"}
}
resolve(route: ActivatedRouteSnapshot) {
console.log(route.data.title); // "Post"
console.log(route.params['slug']) // prints the dynamic parameter value
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With