I have configured the resolve
parameter of several routes to return a promise in order to delay instantiation of the controller until the promise is resolved. Currently I am using the function notation, rather than specifying a string to inject.
For example:
.when('/article/:id', {
templateUrl: 'app/article/article.html',
controller: 'ArticleController',
resolve: {
article: ['Content', '$route', function (Content, $route) {
return Content.get({ contentId: $route.current.params.id }).$promise;
}]
}
})
The article
parameter is correctly injected with the resolved promise value.
However, I would like to keep it DRY and inject this value by specifying a string, as is mentioned in the documentation.
When I set up a factory function to provide the promise like so, the instance is only injected correctly once (the first time). Thereafter, the same promise is used because the AngularJS injection service has cached the instance.
.factory('contentPromise', ['Content', '$route', function (Content, $route) {
return Content.get({ contentId: $route.current.params.id }).$promise;
}])
Is it possible to specify that the factory function must be run every time it is requested? Or to achieve my goal in some other way?
The first example you have is the way to go, I think you could go a little bit "DRYer" like this:
Service: