A resolve
functionality should work for both - parent and child. There is a link to working plunker.
Both resolves will be triggered, and ui-router
will wait until both of them are executed. In a child we can get the stuff resolved for parent, as well its own. So I would suggest to change the names (but it is not needed) and do it like this:
.state('layout', {
url: "",
templateUrl: 'partials/layout.html',
controller:'LayoutController',
abstract:true,
resolve : {
result_data: function ($q, $timeout)//,CommonService)
{
//return resolve_homepage($q,CommonService)
var deferred = $q.defer();
$timeout(function(){
deferred.resolve("from a parent");
}, 500);
return deferred.promise;
}
}
})
.state('homepage', {
url: "/homepage",
templateUrl: 'partials/homepage.html',
parent: 'layout',
controller:'HomepageController',
resolve : {
result_data_child: function ($q, $timeout)//,CommonService)
{
//return resolve_homepage($q,CommonService)
var deferred = $q.defer();
$timeout(function(){
deferred.resolve("from a child");
}, 500);
return deferred.promise;
}
}
Now, we do have two params available: result_data
and result_data_child
. So these could be our controllers:
.controller('LayoutController', function ($scope, $state, result_data) {
$scope.state = $state.current;
$scope.result_data = result_data;
})
.controller('HomepageController', function ($scope, $state, result_data, result_data_child) {
$scope.state = $state.current;
$scope.result_data_parent = result_data;
$scope.result_data_child = result_data_child;
})
Summary. As we can see here, resolve feature is working for both. Also both (parent and child) must be resolved, when navigating to child, before this state is allowed.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…