to $routeProvider or $stateProvider

All we need is an easy explanation of the problem, so here it is.

I have been looking for a sound answer to to this dilema, to routeProvider or not to.

It appears as if $routeProvider is soon going to be discontinued and replace with $stateProvider unfortunately I don’t know the accuracy of this statement plus stateProvider is still only available via ui_router plugin.

Is the plan to add stateProvider as part of the AngularJS Core? Is it save to assume that it will soon replace the old $routeProvider?

They certainly don’t play well together and the migration CI that I found in github doesn’t work and lacks documentation.

How to solve :

I know you bored from this bug, So we are here to help you! Take a deep breath and look at the explanation of your problem. We have many solutions to this problem, But we recommend you to use the first method because it is tested & true method that will 100% work for you.

Method 1

After a very long time we decided to bite the bullet and migrate from 1.1.1 to 1.2. At the same time we realized how limited $routerProvider really is so we went with ui-router. So far, we love it, it allows you to do some complex nesting in the views plus add a bit more structure to your app, for example, in $stateProvider you can define onEnter and onExit which allows you to modify your data and restore it upon exiting, you can also transitionTo state which is extremely powerful. I would vote for ui-router to be part of Angular core and even replace $routeProvider. I hope this helps you made up your mind. $routeProvider still works, if you have a basic app or demo page.

Method 2

We started with $routeProvider and moved to $stateProvider to leverage some of the features that ui-router provides. When we moved the migration was absolutely trivial. Having said that, ui-router is still very early (from their GitHub page):

Warning: UI-Router is pre-beta and under active development. As such, while this library is well-tested, the API is subject to change. Using it in a project that requires guaranteed stability is not recommended.

Stick with $routeProvider until you decide you need something else. Until then, make sure you are getting good test coverage so that shifts like that aren’t too big of a concern.

Note: Use and implement method 1 because this method fully tested our system.
Thank you 🙂

All methods was sourced from or, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply