我创建工作示例在这里
还有类似的问题:在 AngularJS 中使用 UI-Router 将状态重定向到默认子状态
解决方案来自一个很酷的“评论”与使用重定向的问题相关.when()
(https://stackoverflow.com/a/27131114/1679310) and 非常酷的解决方案(作者:Chris T,但原帖作者:yahyaKacem)
https://github.com/angular-ui/ui-router/issues/1584#issuecomment-75137373
在状态定义中,我仅添加了一项设置bookDetails
状态,:redirectTo: 'bookDetails.basic',
。我们来看一下:
$urlRouterProvider.otherwise('/home');
$stateProvider
.state('home', {
url:'/home',
controller: 'HomeController',
templateUrl: '/static/publisher/views/Publisher_Home_Template.html'
})
.state('books', {
url:'/books',
controller: 'BooksController',
templateUrl: '/static/publisher/views/Book_Listing_Template.html'
})
.state('bookDetails', {
// NEW LINE
redirectTo: 'bookDetails.basic',
url : '/books/:b_id',
controller: 'EditBookController',
templateUrl: 'static/publisher/views/Product_Page_Template.html'
})
.state('bookDetails.basic', {
url : '/basic',
templateUrl: '/static/publisher/views/tab1.html'
})
.state('bookDetails.publisher', {
url : '/publisher',
templateUrl: '/static/publisher/views/tab2.html'
})
现在 - 只需这几行就能创造奇迹:
app.run(['$rootScope', '$state',
function($rootScope, $state) {
$rootScope.$on('$stateChangeStart',
function(evt, to, params) {
if (to.redirectTo) {
evt.preventDefault();
$state.go(to.redirectTo, params)
}
}
);
}]);
这样我们就可以使用默认重定向来调整任何状态...检查一下here