由亚伦说,你可以使用$状态导航到一个默认的子状态,但这里有一个陷阱说假设你有超过1名儿童:
.state('places',
{
url:'/places',
controller:'PlacesController',
templateUrl:'views/places.html'
})
.state('places.city',
{
url:'/:city',
templateUrl:function(stateParams)
{
return 'views/places/'+stateParams.city+'.html';
}
})
.state('places.child2',
{
url:'/:city2',
templateUrl:function(stateParams)
{
return 'views/places/'+stateParams.child2+'.html';
}
});
和你父控制器PlacesController你有$ state.go(places.city)然后,只要父控制器即PlacesController被调用,你将被重定向到城市状态。 所以如果有人在child2状态并按下刷新按钮,父控制器将被调用,他将被重定向到城市,这不是你想要的!
ANS:所以,你可以这样做,即如果该人是在父母的状态重定向之前检查当前的状态然后重定向到任何默认的子状态,但如果此人在任何孩子的状态,那么请不要做父控制器中的重定向: -
if($state.current.name == "places"){
$state.go('places.city');
}
希望这有助于!父状态
.state('places',
{
url:'/places',
resolve: { default: function($state) {
if ($state.is('places')) $state.go('places.city', { url: 'london'})
}}
controller:'PlacesController',
templateUrl:'views/places.html'
})
.state('places.city',
{
url:'/:city',
templateUrl:function(stateParams)
{
return 'views/places/'+stateParams.city+'.html';
}
});
检查语法错误
,你可以设置一个的jsfiddle? –
对不起,没有语法高亮设置。应该是干净的现在阅读。 – Francisc
[angularjs ui-router default child state]可能重复(http://stackoverflow.com/questions/17001589/angularjs-ui-router-default-child-state) –