I have two abstract states parent
and parent.child
, and an activateable state parent.child.grand
.
I want parent
to be promise resolved before parent.child.grand
gets its resolves executed. Why? Because a certain data which comes from the ajax request in the resolve from parent
is required inparent.grand.child
.
Here's a gist
Is it possible to sequentially chain the promises of parent to children states without using controllers ?
(parent
resolve start -> finish ajax request -> resolve promise -> parent.child.grand
resolve start -> finish ajax request -> resolve promise)
I've seen a few answers for this but it still wasn't entirely clear without an example. The docs say:
The resolve keys MUST be injected into the child states if you want to wait for the promises to be resolved before instantiating the children.
Here's the example:
$stateProvider.state('parent', {
resolve:{
resA: function(){
return {'value': 'A'};
}
},
controller: 'parentCtrl'
})
.state('parent.child', {
resolve:{
// Adding resA as an argument here makes it so that this child state's resB resolve
// function is not run until the parent state's resA resolve function is completed.
resB: function(resA){
return {'value': resA.value + 'B'};
}
}
controller: 'childCtrl'
})
And you don't have to inject resA into the child controller.
If you add auth
to the dependency injection of your grandchild resolve, ui-router will resolve it prior to the grandchild resolve.
['authsrv', 'auth', function(authsrv, auth){}]
Hope that makes sense.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With