我已经定义了我的UI-Router状态:
$stateProvider.state('contact', {
url: '/contactDemo',
views: {
'main': {
controller: 'contactMainController',
templateUrl: 'templates/contact.tpl.html'
}
}
}).state('contact.details', {
abstract: true,
controller: 'contactDetailsController',
templateUrl: 'templates/contact.details.tpl.html'
}).state('contact.details.add', {
url: '/add'
}).state('contact.details.filter', {
url: '/filter/{filterId}'
}).state('contact.details.filter.record', {
url: '/record/{recordId}',
resolve: {
record: ['$stateParams', 'Restangular', function($stateParams, Restangular) {
return Restangular.one('records', $stateParams.recordId).get();
}]
}
}).state('contact.details.filter.record.edit', {
url: '/edit'
});
现在我想将已解决的record
注入contactDetailsController
。如果我这样做,我会收到Unknown provider
错误。我无法将resolve
移动到抽象状态,因为从那里我无法访问$stateParams
内的ID。
如果我将controller
属性移动到子状态,则永远不会调用我的控制器。
有人知道如何将已解析的属性注入到抽象父状态的控制器中吗?
答案 0 :(得分:1)
如记录here所述,可以继承resolve。不是从孩子注射到父母。
0.2.0版中的新功能
子状态将从父状态继承已解析的依赖关系,它们可以覆盖它们。然后,您可以将已解析的依赖项注入控制器并解析子状态的功能。
$stateProvider.state('parent', {
resolve:{
resA: function(){
return {'value': 'A'};
}
},
controller: function($scope, resA){
$scope.resA = resA.value;
}
})
.state('parent.child', {
resolve:{
resB: function(resA){
return {'value': resA.value + 'B'};
}
},
controller: function($scope, resA, resB){
$scope.resA2 = resA.value;
$scope.resB = resB.value;
}
简单解决方案:
$stateParam
在孩子 resolve
应注入父 无法正常工作 - 因为很多孩子都会共享一位家长。
在孩子的参数不同的情况下,父母会留下来。