以下是状态层次结构示例
.state('home', {
url: '/home',
templateUrl: 'views/home.html',
controller: 'HomeCtrl'
})
.state('home.books', {
url: '/:collectionId',
abstract: true,
controller: 'BooksCtrl'
})
.state('home.books.displaybooks', {
url: '^/books',
templateUrl: 'views/displaybooks.html',
controller: 'DisplayBookCtrl'
})
在home.books.displaybooks中,我展示了一系列书籍。
我可以通过两种方式访问此状态,
谢谢,
答案 0 :(得分:2)
在状态控制器中,$ stateParams对象只包含 在该州注册的参数。所以你不会看到 在其他州注册的params,包括祖先。
解决方法是在父路由中使用resolve,然后将解析后的值注入子状态/控制器:
$stateProvider
.state('home', {
url: '/home',
templateUrl: 'views/home.html',
controller: 'HomeCtrl'
})
.state('home.books', {
url: '/:collectionId',
abstract: true,
controller: 'BooksCtrl',
resolve:{
collectionId: ['$stateParams', function($stateParams){
return $stateParams.collectionId;
}]
}
})
.state('home.books.displaybooks', {
url: '^/books',
templateUrl: 'views/displaybooks.html',
// controller: 'DisplayBookCtrl' // this just needs collectionId now
controller: function($stateParams, collectionId){
console.log(collectionId);
}
});