Angular15 min read
Route Resolvers: Load Data Before Navigation
Use resolvers to fetch data before a page loads, reducing empty UI flashes and improving UX.
Olivia Carter
August 5, 2025
8.5k297
Resolvers fetch data before a route activates. This is perfect when:
- the page cannot render without data
- you want fewer loading states inside components
- you want a smoother navigation experience
## Step 1: Create a resolver (functional resolver)
```ts
import { ResolveFn } from '@angular/router';
import { inject } from '@angular/core';
import { UsersApi } from './users.api';
export const userResolver: ResolveFn<any> = (route) => {
const api = inject(UsersApi);
const id = route.paramMap.get('id')!;
return api.getUser(id);
};
```
## Step 2: Add it to the route
```ts
{
path: 'users/:id',
loadComponent: () => import('./user-details.component').then(m => m.UserDetailsComponent),
resolve: { user: userResolver },
}
```
## Step 3: Read resolved data in component
```ts
import { Component } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
@Component({
selector: 'app-user-details',
standalone: true,
template: `
<h2>{{ user?.name }}</h2>
<p>Email: {{ user?.email }}</p>
`,
})
export class UserDetailsComponent {
user: any;
constructor(route: ActivatedRoute) {
this.user = route.snapshot.data['user'];
}
}
```
## Tradeoff
Resolvers can slow navigation slightly because they fetch before page shows. Use when the UI truly depends on the data.
> Next: Preloading strategies to speed up lazy routes.
#Angular#Routing#Advanced