Skip to content

Wait for resolve promises to finish before invoking template? #74

Open

Description

@troygilbert

I'm currently using resolve to preload resources needed for a view and using untilResolved to display a loading screen (similar to the official example). Using this approach I've got two choices for the template that's displayed once the resource is resolved: success (the default template) or failed (resolveFailed template).

I'd like a bit more finesse; I wanted to be able to select my template dynamically based on the resource that's resolved. Using a function for template seemed like the right way to achieve this. I encountered two problems:

  • While the template function is injectable, the injector doesn't yet know about the resolved resources, so you can't inject them trivially. I did find you could look them up via $routeSegment.chain[n].locals. This seems brittle, though, because it requires knowledge of the global segment structure.
  • This may be the reason the resolved resources aren't known to the injector: the template function is called before waiting for any resolve promises to be fulfilled. This appears to be because the template function itself supports the return of a promise which is added to the locals as $template. The code then waits for $q.all(locals) before finalizing the segment switch, instantiating the controller, etc. As a result, I have to create a template before resources are resolved.

I may be missing a better way of doing things, but it seems to me that it'd be hugely powerful/flexible to have the template functions wait for resolve locals. In fact, since there are a set of params that are used while resolving, and a set of params used if resolving fails, it seems logical that the "success" params would also depend on resolving.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions