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

Posted

技术标签:

【中文标题】从简单的 js 代码调用 angularjs 服务【英文标题】:Call angularjs service from simple js code 【发布时间】:2013-06-23 13:48:26 【问题描述】:

我有以下 angularjs 服务:

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

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

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

【问题讨论】:

【参考方案1】:

使用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 提供程序。

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

【讨论】:

哦,是的,我真的需要这个。谢谢,为你点赞:D 一句警告:对我来说,这个解决方案没有 100% 有效,因为我的服务试图获取在 ng-template 元素中定义的模板但未能这样做(没有找到)。然而,@DorCohen 提出的解决方案在这种情况下也非常有效。 "angular.injector 创建一个新的注入器函数,它不返回与引导应用程序关联的注入器函数。"如here 所述。即,它将为您的服务注入新的$rootScope 如果myservice调用其他服务,如何获取Myservice? 在我的例子中,工厂返回了一个函数(不是 new 函数),所以它看起来更像这样:angular.injector(['ng', 'main.app']).get("MyService")()【参考方案2】:

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

angular.element('*[ng-app]').injector().get("MyService").GetName ();

【讨论】:

这个解决方案对我不起作用,但下面的解决方案对我有用。【参考方案3】:

对我来说,它适用于:

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")

【讨论】:

接受的答案对我不起作用,但这个答案对我有用。 +1【参考方案4】:

这是我使用的一个实用方法:

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

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

【讨论】:

以上是关于从简单的 js 代码调用 angularjs 服务的主要内容,如果未能解决你的问题,请参考以下文章

无法从简单的 Ajax 函数调用 Spring Boot RestController 中的 GET 方法

如何在Node.js中从简单的HTTPS请求构造和提取值?

如何从简单的 Python 服务器打印到 html 页面?

如何更新使用 C++ 中的 ATL OLE 数据库从简单的 SQL 服务器表中获取的行数据

将数据从简单的 NSView 传递到 SwiftUI 视图

从简单的 python 列表创建图像和标签的 tensorflow 数据集