29

我有以下 angularjs 服务:

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

        this.GetName = function () {
            return "MyName";
        };
    };
}]);

如何从旧版 js 代码中调用GetName函数?MyService

4

4 回答 4

45

使用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();

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

注意- 在加载自定义模块之前,您需要添加“ng”作为您的第一个模块,因为您的示例代码取决于 ng 模块中的 $http 提供程序。

编辑-get()在 OP 的答案中使用,请注意此代码正在获取服务,而不依赖于绑定到应用程序模块“main.app”的元素。

于 2013-06-26T19:22:40.340 回答
18

对我来说,它适用于:

angular.element(document.body).injector().get("MyService")

尝试此操作时出现“未知提供者”错误:

angular.injector(['ng', 'main.app']).get("MyService")

因为我正在使用 jqLit​​e,所以我做不到

angular.element('*[ng-app]')

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

angular.element(document.body).injector().get("MyService")

或者

angular.element(document).find('body').injector().get("MyService")
于 2016-08-03T14:04:02.917 回答
15

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

angular.element('*[ng-app]').injector().get("MyService").GetName ();
于 2013-06-27T12:40:26.667 回答
0

这是我使用的实用方法:

function getService(name, element) {
    element = element || '*[ng-app]';
    return angular.element(element).injector().get(name);
}

getSrv("name-of_service", document.body)

于 2016-10-17T19:05:13.380 回答