0

Like this question, I want to dynamically add ui-router states, but I'm not sure how to do it given the following:

We start with a small set of routes (max 5) that allow the user to navigate the login process: The user logs in (multi step login process), then selects the product type and role they want to use (assuming user has more than one product type/role, else they will bypass this view). At that point, I want to go out to my service and get the list of routes the user has access to, given the userid, product type, & role - I plan to send down an array of data structures that very closely match what is provided to $stateProvider.state(...).

In my app.run.js, I am checking $rootScope.$on("$stateChangeStart" and moving the user along from view to view in the multi-step login process and therefore know when I need to go out to my service to load up the available routes.

When the routes are loaded, I'll probably put a flag in a cookie to indicate that it was properly loaded for this user/product/role.

I don't think a provider really makes sense here since I don't want the routes loaded at config. It feels wrong (not sure why) to call the service to load the routes in the stateChangeStart.

Is this approach a reasonable one?

Note: I also see that there is an outstanding request to be able to remove states from $stateProvider. In the meantime until this request is implemented, how do we clear the $stateProvider of routes (apart from a browser refresh)?

Community
  • 1
  • 1
Ed Sinek
  • 4,829
  • 10
  • 53
  • 81

1 Answers1

0

For adding states after the config phase, you should use the Future State functionality in the ui-router-extra package.

Since there's no official support for deleting routes, you could probably merge in this PR to get something going, but you'd have to add functionality to remove the condition from urlRouterProvider as well since that's a bug with that PR.

David Boskovic
  • 1,469
  • 9
  • 14