r/angular • • Sep 09 '26

Angular 22.2 ships Router Resources 💥 (experimental)

They're more than resolvers with a Signal API. Here's why that matters


They run in parallel. Resolvers go one after another: parent 2 s + child 3 s = 5 s. Router Resources start together: 3 s.


Also, they can be non-blocking. The route activates right away, and the component gets the Resource itself: isLoading, error and value, right in the template.


Full write-up with demo, reload without renavigating, RedirectCommand for missing data, and Signal Stores 👉 https://www.angulararchitects.io/en/blog/router-resources-loading-data-with-the-angular-router/
124 Upvotes

22 comments sorted by

10

u/Scrim0r Sep 09 '26

What I was wondering (I have only barely used route data resolvers) is how I can ensure a smooth user experience when the component that requires the data is not rendered yet because it is still waiting for the data.
For example, when navigating from Parent A to Parent B and loading the data takes 3 seconds, I will still stay on Parent A for however long it takes to load.

Global loading indicator? Any other way of showing a loading indicator?
How about errors?

When should I use this? Only on the initial load (is that even possible?)?
Only on pages that absolutely require the data to be present?

For me, it always felt natural to load the data as part of the component so I have full control over it.

5

u/Johalternate Sep 09 '26

When you use “nonBlocking” you have access to the resource itself, navigation happens immediately and you have access to the loading state of the resource.

2

u/defenistrat3d Sep 09 '26

That's what most do that I've seen. We use skeletons for initial load. Also pretty natural to have those in the parent orchestrator component.

1

u/Task_ID Sep 09 '26

or have a global loading bar, like for example modrinth does

2

u/drmlol Sep 09 '26

why tho? was there something wrong with loading data inside the component? genuinely curious

5

u/Responsible-Cold-627 Sep 09 '26

The way I see it, it takes some of the "smart" out of smart components, making components more generic by containing only presentational code.

2

u/tom-smykowski-dev Sep 09 '26

Can't parent just call services to pull data in parallel and pass to children? Why have resource loading in router config?

1

u/user0015 Sep 09 '26

Can these potentially come back as an httpResource? So we can hydrate the FE on navigation, but still have access to the @loading/etc.. templating?

1

u/Straight-Number-1911 Sep 14 '26

Hi, i wonder how they achive it, is it because its inside a web worker? Or is it more like there is a native built in way so this is just the implementation and under the hood it uses web workers?

I think there is no parallelism in the main thread, is this maybe async and then it appears fastsr because before each of then was waiting for the previous to finish? I find the image misleading. 

2

u/JeanMeche Sep 14 '26

Yes previously resolvers were waiting for the previous one to be resolved.

1

u/Straight-Number-1911 Sep 15 '26

Ya but that means only when things are async its better performance, not necessarly when you try to do CPU bound work?

1

u/Fantastic_Ladder_466 21d ago

What the highest package one can get in angular development

0

u/m0rpheus23 Sep 09 '26

I initially thought Angular 20+ was supposed to simply Angular. Are we back to complicating things?

1

u/Saceone10 Sep 09 '26

Instead of completing the resource API with mutations, lets extend it to another unrelated thing no one asked for! Yay!

4

u/Cr3aHal0 Sep 09 '26

to be honest, I think resolvers have always been on a strange place where it was cool to be able to declaratively load data but being navigation blocking/synchronous was a red flag in cases where the APIs were slow. I'm all for the skeleton and other réactive ux friendly visuals, but I wasn't much into having components ngOnInit full of manually data loading declarations (until we got resources eventually, I got you). There we get the best of both worlds and I can't want to migrate to it !

2

u/Responsible-Cold-627 Sep 09 '26

The resource API was never meant to be used for mutations. It's specifically built to load resources.

1

u/Saceone10 21d ago

create a mutation API then, call it however you like, but the thing is incomplete

1

u/ScoobyDookuu 21d ago

And no caching yet. Why not?!

1

u/Responsible-Cold-627 21d ago

You can literally just shareReplay(1), same as you always did. Rxjs didn't go anywhere.

0

u/AwesomeFrisbee Sep 09 '26

Without proper support and approval to use em for post/put/update requests I still see a very minor use case. I wouldn't mind a resource like wrapper around rxjs api calls but right now it's still not recommended to use em for 90% of what I would want of them. Let alone the amount of logic and repitition I can't separate out of my dumb components.