Angular's built-in @defer block defers loading the dependency graph of its contents until a trigger fires — here, a 5-second timer. Combine with @placeholder / @loading / @error to fill the intermediate states.
This page demonstrates a way to lazy-load components