Given a route config
{
path: '/root/:rootId',
children: [{
path: '/child1/:child1Id',
children: [{
path: '/child2/:child2Id
component: TestComponent
}]
}]
}
In TestComponent how can I easily get all route params. I'm wondering if there is an easier way than
let rootId = route.parent.parent.snapshot.params;
let child1Id = route.parent.snapshot.params;
let child2Id = route.snapshot.params;
This seems overly redundant especially if I'm watching the route params observable instead of access the param through the route snapshot. This method also seems fragile since it would break If I moved any any of the routes/params around. Im used to angular ui-router where a single object $stateParams was supplied with all param data easily accessible. I have these same concerns with route resolved data along being accessed from a single node in the route tree. Any help would be much appreciated. Thanks in advance
Best Answer
As of Angular 5.2, you can do Router configuration to inherit all params to child states. See this commit if interested in the gory details, but here's how it's working for me:
Wherever you have your call to
RouterModule.forRoot()
, include a configuration object with the inheritance strategy set toalways
(default isemptyOnly
):Now when you're in a child component looking at a
ActivatedRoute
, ancestors' params appear there (e.g.activatedRoute.params
) rather than something messy likeactivatedRoute.parent.parent.parent.params
. You could access the value directly (e.g.activatedRoute.params.value.userId
) or subscribe viaactivatedRoute.params.subscribe(...)
.