skills/dev-skills/angular-developer/references/data-resolvers.md
Data resolvers fetch data before a route activates, ensuring components have the necessary data upon rendering.
Implement the ResolveFn type.
export const userResolver: ResolveFn<User> = (route, state) => {
const userService = inject(UserService);
const id = route.paramMap.get('id')!;
return userService.getUser(id);
};
Add the resolver under the resolve key.
{
path: 'user/:id',
component: UserProfile,
resolve: {
user: userResolver
}
}
ActivatedRoute (Traditional)private route = inject(ActivatedRoute);
data = toSignal(this.route.data);
user = computed(() => this.data().user);
Enable withComponentInputBinding() in provideRouter to pass resolved data directly to @Input or input().
// app.config.ts
provideRouter(routes, withComponentInputBinding());
// component.ts
user = input.required<User>();
Navigation is blocked if a resolver fails.
withNavigationErrorHandler for global handling.catchError within the resolver to return a RedirectCommand or fallback data.return userService
.get(id)
.pipe(catchError(() => of(new RedirectCommand(router.parseUrl('/error')))));