There is a new working plunker (extending the Angular UI-Router $urlRouterProvider .when not working *anymore*), which should be working with the version 0.2.13+
Previous solution
Until version 0.2.12-
we could use $urlRouterProvider.when()
, suggested in documenation (small cite):
How to: Set up a default/index child state
…
if you want the ‘parent.index’ url to be non-empty, then set up a redirect in your module.config using $urlRouterProvider:
$urlRouterProvider.when('/home', '/home/index');
So this was solution shown in the Q & A mentioned above:
var whenConfig = ['$urlRouterProvider', function($urlRouterProvider) {
$urlRouterProvider
.when('/app/list', ['$state', 'myService', function ($state, myService) {
$state.go('app.list.detail', {id: myService.Params.id});
}])
.otherwise('/app');
}];
...
app.config(whenConfig)
Now – we cannot.
UI-Router “FIX” in 0.2.13
It is due to “FIX” (which I am simply not sure about), mentioned in the release 0.2.13
Bug Fixes
$state:
– …
– Avoid re-synchronizing from url after .transitionTo (b267ecd3, closes #1573)
And here is the new code added in the urlRouter.js:
if (lastPushedUrl && $location.url() === lastPushedUrl)
// this line stops the corrent .when to work
return lastPushedUrl = undefined;
lastPushedUrl = undefined;
This piece of code is optimizing/fixing some other issue … but also, turning off the .when()
functionality
SOLUTION
As already mentioned, this brand new plunker shows the way with version 0.2.13+. We just have to listen to state change, and if the state is “app.list” we can go to its detail with some id…
var onChangeConfig = ['$rootScope', '$state',
function ($rootScope, $state) {
$rootScope.$on('$stateChangeStart', function (event, toState) {
if (toState.name === "app.list") {
event.preventDefault();
$state.go('app.list.detail', {id: 2});
}
});
}]
Check the plunker here