8

I'm familiar with the "$urlRouterProvider.otherwise('{route here}')" syntax in angular to use as catch all in Angular UI-Router.

What I'm wondering is - is there a way to do conditional "otherwise" routing based on the parent state of when the route is entered incorrectly?

For instance, suppose that I have the following configuration:

$stateProvider
.state('core', {configuration here})
.state('core.page1', {configuration here...})
.state('dashboard', {configuration here})
.state('dashboard.page1', {configuration here})

$urlRouterProvider.otherwise('/core/page1');

What I'd like to have happen is that anytime a route is entered in that has "/core/{route here}",
if it doesn't match any of the current states, to route back to '/core/page1',
and anytime a route is entered that has "/dashboard/{route here}" that doesn't match any of the current states, to route back to "/dashboard/page1".

Anyone have experience doing this, or an idea of how I could accomplish it? Is there anything built in to Angular that allows for this type of behavior?

Thanks in advance!

Radim Köhler
  • 122,561
  • 47
  • 239
  • 335
Jonathan
  • 680
  • 1
  • 9
  • 24

1 Answers1

17

As shown here

How not to change url when show 404 error page with ui-router

The .otherwise() does not have to be a string (url)... it could be a smart decision maker:

$urlRouterProvider.otherwise(function($injector, $location){
   var state = $injector.get('$state');
   if(....)
     state.go('core');
   else(...)
     state.go('dashboard');
   ...
   return $location.path();
});

The doc:

$urlRouterProvider.otherwise(rule)

Defines a path that is used when an invalid route is requested.

string - The url path you want to redirect to or a function rule that returns the url path.
The function version is passed two params: $injector and $location services, and must return a url string.

Community
  • 1
  • 1
Radim Köhler
  • 122,561
  • 47
  • 239
  • 335
  • Wow! Thanks for the rapid response. This looks exactly like what I'm looking for! Just as an FYI - the link you listed ($urlRouterProvider.otherwise(rule)) isn't working. – Jonathan Jun 24 '15 at 12:03
  • 1
    You were right... thanks. I fixed the link to get right to the DOC ;) – Radim Köhler Jun 24 '15 at 12:05