AngularJS:将服务和工厂注入非AngularJS函数

时间:2015-01-02 21:54:00

标签: javascript angularjs

我希望能够在运行时执行自定义外部脚本,并允许他们访问我的AngularJS自定义服务和工厂。

加载的脚本不应该是控制器,因为我没有兴趣将它们链接到任何视图。

看起来应该是这样的:

1)在运行时加载外部脚本

2)注入该函数自定义AngularJS服务和工厂,然后执行它。

是否可以这样注射?

1 个答案:

答案 0 :(得分:5)

在你问的时候回答这个问题 - 是的,你可以做这样的事情。

您可以使用injector来获取服务实例:

angular.injector(["Your.Service.Module"]).get("FooSvc");

请记住,如果您的服务有其他依赖项,那么您需要指定所有这些依赖项。例如,如果您的服务需要$timeout

angular.module("fooModule", []).factory("FooSvc", function($timeout){
  ...
}

然后你需要像这样注入它:

var fooSvcInstance = angular.injector(["fooModule", "ng"]).get("FooSvc");

另请注意,该服务的实例将与注入您的应用的实例不同。

Plunker

你应该重新评估为什么你需要这样做。

修改

要获得与应用程序获得的服务相同的服务实例,您需要获取相同的注入器实例。要做到这一点,您需要从Angular应用程序中的DOM元素对象injector。例如,假设<body>位于您的应用中:

// make sure that body has loaded (for example, in window.onload)
var injectorInstance = angular.element(document.body).injector();
var fooSvcInstance = injectorInstance.get("FooSvc");

Updated Plunker