Route Resolvers
Explain how resolvers pre-fetch data before route activation so a component never renders in a data-less state.
Without a resolver, a component typically fetches its own data inside ngOnInit, which means the component renders first (often showing a loading spinner or empty state) and then re-renders once the data arrives. A route resolver flips this order: it fetches the data as part of the navigation itself, before the route activates, so the component's ActivatedRoute data already contains what it needs the moment it's constructed.
It's like a restaurant that plates your entire meal in the kitchen before calling you to the table, rather than seating you first and bringing dishes out one at a time — you wait a bit longer before sitting down, but there's no empty-table moment once you do.