I have an ui.router state in which I need to resolve some data, but it seems to resolve after loading the controller and before loading the template.
State definition looks like:
$stateProvider
.state( 'route', {
url: '/update/:id',
template: '<update order="$resolve.order"></update>',
resolve: {
order: function( OrdersService, $stateParams ) {
return OrdersService.get( $stateParams.id ).$promise
}
}
} )
Component:
const Update = {
bindings: {
order: "<"
},
controller,
template
};
angular.module( 'app' )
.component( 'update', Update );
Controller:
export default class UpdateCtrl {
constructor(){
...
console.log(this.order);
...
}
}
OrdersService:
class OrdersService {
constructor( $resource, api_name ) {
this.$resource = $resource( api_name + '/orders/:id', { id: '@id' }, {
get: { method: 'GET' }
} );
}
get( orderId ) {
return this.$resource.get( { orderId } );
}
}
angular.module( 'app' )
.factory( 'OrdersService', [
'$resource',
'api_name',
( $resource, api_name ) => new OrdersService( $resource, api_name )
] );
All imports are fine, and I still get following from controller, and full data in template
console.log(this.order) // undefined
P.S. I found some strange behavior when I call console.log(this.order,this)
in the controller constructor.
It prints to console
undefined OrderUpdateCtrl
$stateParams:Object
OrdersService:OrdersService
order:Resource // full resolved object
__proto__:Object