Utilisation du paramètre ngRoute 'resolve' avec une promesse injectée

J'ai configuré le paramètre de resolve de plusieurs itinéraires pour renvoyer une promesse afin de retarder l'instanciation du contrôleur jusqu'à ce que la promesse soit résolue. Actuellement, j'utilise la notation de fonction, plutôt que de spécifier une chaîne à injecter.

Par exemple:

 .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; }] } }) 

Le paramètre de l' article est correctement injecté avec la valeur de promesse résolue.

Cependant, j'aimerais garder DRY et injecter cette valeur en spécifiant une chaîne, comme cela est mentionné dans la documentation .

Lorsque j'ai configuré une fonction d'usine pour donner la promesse, l'instance n'est injectée correctement qu'une fois (la première fois). Par la suite, la même promesse est utilisée car le service d'injection AngularJS a mis en cache l'instance.

 .factory('contentPromise', ['Content', '$route', function (Content, $route) { return Content.get({ contentId: $route.current.params.id }).$promise; }]) 

Est-il possible de spécifier que la fonction d'usine doit être exécutée chaque fois qu'elle est demandée? Ou pour atteindre mon objectif d'une autre manière?

Le premier exemple que vous avez est le chemin à parcourir, je pense que vous pourriez aller un peu "DRYer" comme ceci:

 .when('/article/:id', { ... resolve: { article: ['contentPromise', function (contentPromise) { return contentPromise(); }] } }) 

Un service:

 .factory('contentPromise', ['Content', '$route', function (Content, $route) { return function() { return Content.get({ contentId: $route.current.params.id }).$promise; }; }])