J'ai un service angulaire comme ceci:Est-ce que le service Angulaire est vraiment singleton?
angular.module('MyModule')
.factory('SharedData', function(){
return {
session_id: undefined,
getSessionId: function() {
return this.session_id;
},
setSessionId: function (new_id) {
this.session_id = new_id;
},
};
}).
controller('MyController', ['SharedData', function(SharedData){
console.log("Retrieved session id = " + SharedData.getSessionId());
// getting undefined here!
}]);
j'ai appelé le service à un moment plus tôt dans un autre module comme celui-ci:
angular.module('bootstrapper')
factory("AnotherService", function(){
var injector = angular.injector(['MyModule', 'ng']),
shared_data = injector.get('SharedData');
shared_data.setSessionId(getUrlParameter('SESSIONID'));
...
});
Le résultat de sortie de la console est définie.
Je pense que le SharedData
dans 'MyController' et le SharedData
dans 'AnotherService' ne sont pas le même objet. Cependant, les gens disent tous que les services angulaires sont des singletons. Sont-ils de vrais singletons? sur mes modules
Plus de détails: J'utilise le module 'bootstrapper' pour amorcer manuellement l'autre module 'MyModule':
angular.module('bootstrapper')
.run(function() {
angular.bootstrap(document, ['MyModule']);
});
Oui, ils sont différents dans votre cas. Les services sont des singletons dans la ** même ** application. Ce n'est pas ton cas. – dfsq
@dfsq Voulez-vous dire module quand vous avez dit 'application'? – gm2008
Pas vraiment un module. L'application est ce que bootstrapped comme l'application. Il peut être 'ngApp' ou manuel' angular.bootstrap'. On dirait que vous avez deux applications? – dfsq