In Angular there are multiple ways to pass data to a Component, in particular one can use a Resolve guard to load the data even before the Component is created so that it is always available or one can inject a Service in the constructor of the Component and subscribe to its data$
stream and start with nothing or maybe a default while waiting for the actual data to load.
I cannot understand when one approach may be preferable or more suitable to use vs the other, online examples are all about simply not showing an empty interface to the user. But developers can create a placeholder interface (skeleton / phantom stuff) while loading the data, and this can actually be a better user experience anyway, so what's the point? The UI will not be blocked for the user.
So, are there specific use cases or edge cases when one approach should be used? Or is it simply a matter of taste given my assumptions? I know that in absolute terms there is no "better choice" than the other, I just want to understand with examples if possible.