J'ai le service angularjs suivant:
angular.module('app.main').factory('MyService', ["$http", function ($http) {
return new function () {
this.GetName = function () {
return "MyName";
};
};
}]);
Comment appeler la fonction GetName
à partir de MyService
à partir de code js hérité
Utilisez angular.injector . En utilisant votre code, vous pouvez faire quelque chose comme ceci:
angular.module('main.app', []).factory('MyService', ['$http', function ($http) {
return new function () {
this.GetName = function () {
return "MyName";
};
};
}]);
angular.injector(['ng', 'main.app']).get("MyService").GetName();
Voici le jsfiddle: http://jsfiddle.net/wGeNG/
NOTE - Vous devez ajouter "ng" comme premier module avant de charger votre module personnalisé, car votre exemple de code dépend du fournisseur $ http qui se trouve dans le module ng.
EDIT - En utilisant get()
comme dans la réponse de l'OP mais notez que ce code récupère le service sans que l'élément soit lié au module d'application "main.app".
Pour moi cela a fonctionné avec:
angular.element(document.body).injector().get("MyService")
J'ai eu l'erreur 'Fournisseur inconnu' quand j'ai essayé ceci:
angular.injector(['ng', 'main.app']).get("MyService")
et comme j'utilise jqLite, je ne peux pas faire
angular.element('*[ng-app]')
parce que les sélecteurs ne sont pas supportés par jqLite, mais j'ai eu l'idée de [Dor Cohen]. Ma directive ng-app est sur mon tag body, alors je peux utiliser:
angular.element(document.body).injector().get("MyService")
ou
angular.element(document).find('body').injector().get("MyService")
L’utilisation de la ligne suivante permet d’exécuter ma méthode à partir du service angularjs:
angular.element('*[ng-app]').injector().get("MyService").GetName ();
Voici une méthode utilitaire que j'utilise:
function getService(name, element) {
element = element || '*[ng-app]';
return angular.element(element).injector().get(name);
}
getSrv("name-of_service", document.
body)