在documentation中有人说:
子状态DO从父状态继承以下内容:
通过解决方案解决了依赖关系
自定义数据属性
没有其他任何东西被继承(没有控制器,模板,网址等)。 但是,抽象状态的子节点确实继承了url属性 他们的父母作为他们自己网址的前缀。
这是否意味着在我的孩子状态下,我将能够解析整个请求字符串?
例如如果我有以下状态层次结构:
$stateProvider
.state('contacts', {
url: 'contacts/:contactId',
abstract: true,
/* ... */
})
.state('contacts.details', {
url: '/details',
controller: 'ContactDetailsController',
/* ... */
});
$stateParams
中注入的ContactDetailsController
是否可以访问要在contactId
抽象状态中捕获的contacts
?
答案 0 :(得分:0)
在documentation中找到答案:
在状态控制器中,$stateParams
对象将仅包含在该状态下注册的参数。所以你不会看到在其他州注册的params,包括祖先。
$stateProvider.state('contacts.detail', {
url: '/contacts/:contactId',
controller: function($stateParams){
$stateParams.contactId //*** Exists! ***//
}
}).state('contacts.detail.subitem', {
url: '/item/:itemId',
controller: function($stateParams){
$stateParams.contactId //*** Watch Out! DOESN'T EXIST!! ***//
$stateParams.itemId //*** Exists! ***//
}
})
而是在父路由中使用resolve语句。
$stateProvider.state('contacts.detail', {
url: '/contacts/:contactId',
controller: function($stateParams){
$stateParams.contactId //*** Exists! ***//
},
resolve:{
contactId: ['$stateParams', function($stateParams){
return $stateParams.contactId;
}]
}
}).state('contacts.detail.subitem', {
url: '/item/:itemId',
controller: function($stateParams, contactId){
contactId //*** Exists! ***//
$stateParams.itemId //*** Exists! ***//
}
})