从简单的js代码调用angularjs服务

Dor*_*hen 29 javascript angularjs angularjs-service

我有以下angularjs服务:

angular.module('app.main').factory('MyService', ["$http", function ($http) {
    return new function () {

        this.GetName = function () {
            return "MyName";
        };
    };
}]);
Run Code Online (Sandbox Code Playgroud)

如何从遗留的js代码中调用GetName函数MyService

小智 44

使用angular.injector.使用您的代码,您可以执行以下操作:

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();
Run Code Online (Sandbox Code Playgroud)

这是jsfiddle:http://jsfiddle.net/wGeNG/

- 在加载自定义模块之前,需要添加"ng"作为第一个模块,因为示例代码依赖于ng模块中的$ http提供程序.

编辑 - get()在OP的答案中使用,请注意,此代码在不依赖于绑定到app模块"main.app"的元素的情况下获取服务.


小智 17

对我来说它适用于:

angular.element(document.body).injector().get("MyService")
Run Code Online (Sandbox Code Playgroud)

尝试这个时,我收到了"未知提供商"错误:

angular.injector(['ng', 'main.app']).get("MyService")
Run Code Online (Sandbox Code Playgroud)

而我正在使用jqLit​​e,我做不到

angular.element('*[ng-app]')
Run Code Online (Sandbox Code Playgroud)

因为jqLit​​e不支持选择器,但我得到了[Dor Cohen]的想法.我的指令ng-app在我的身体标签上,然后我可以使用:

angular.element(document.body).injector().get("MyService")
Run Code Online (Sandbox Code Playgroud)

要么

angular.element(document).find('body').injector().get("MyService")
Run Code Online (Sandbox Code Playgroud)


Dor*_*hen 15

使用以下行有助于从angularjs服务执行我的方法:

angular.element('*[ng-app]').injector().get("MyService").GetName ();
Run Code Online (Sandbox Code Playgroud)