Angular.injector (…). Invoquez dans la console ne pas retourner un singleton

Le script:

app = angular.module('app', []) app.factory 'MyFactory', -> val: 'Clark Kent' app.controller 'MainCtrl', ($scope, MyFactory) -> MyFactory.val = 'Waldo' $scope.myFactory = MyFactory 

Mettez ceci dans la console:

 angular.injector(['ng','app']).invoke(function(MyFactory) { console.log(MyFactory); }) 

… et au lieu de Waldo , vous avez Clark Kent !

Pourquoi ne retourne-t-il pas le même objet?

Découvrez le plunkr

Les services en angulaire sont des singletons dans le sens où ils ne sont créés qu'une fois par injecteur.

angular.injector crée cependant une nouvelle fonction d'injecteur.

Pour obtenir l'injecteur d'application en cours: angular.element(domElement).injector()

Pour votre exemple:

 angular.element(document.querySelector('html')).injector().invoke(function(MyFactory) { console.log(MyFactory); })