Edited with more details
Newbie question here, I am sure. I am trying to do something that I thought would be straightforward, but I am not getting anywhere.
Basically, I have a parent state with several child states. I want to load some data in the resolve of the parent state so that it is available to all child states. To do this, I need a parameter (context) that is passed to the child state to be available. I am getting it via $state.params
. the code (some omitted for clarity) is like this:
.state('pbr', {
url: "/pbr",
templateUrl: "pbr/pbr.html",
controller: "pbrBaseCtrl",
abstract: true ,
resolve: {
dpts: function(NavDPT, $state) {
return NavDPT.query({context: $state.params.context}).$promise;
}
}
})
.state('pbr.review', {
url: "/review/{context}?div",
templateUrl: "pbr/pbr-review.html",
controller: "pbrReviewCtrl"
})
From what I understand, $state.params
should contain the passed parameters for the parent and child states whereas $stateParams
have the params only for the active state.
Anyway, what I am seeing is that $state.params
does not get populated before the resolve happens, and thus the fetch of data fails. It does eventually get populated though. I can't seem to work out a way to wait for $state.params
to be available before getting the data. I have tried wrapping the thing in a timeout, etc.
I have tried to instead use query params, and have specified the query param at the parent level, and I observe this same behavior - newcontext is not available yet when the resolve happens.
.state('pbr', {
url: "/pbr?newcontext",
templateUrl: "pbr/pbr.html",
controller: "pbrBaseCtrl",
abstract: true ,
resolve: {
dptsResource: 'NavDPT',
dpts: function(dptsResource, $state, $log) {
$log.info("state.params is also ",$state.params);
return dptsResource.query({context: $state.params.newcontext}).$promise;
}
}
})
Thanks.
See Question&Answers more detail:
os