我希望能够在运行时执行自定义外部脚本,并允许他们访问我的AngularJS自定义服务和工厂。
加载的脚本不应该是控制器,因为我没有兴趣将它们链接到任何视图。
看起来应该是这样的:
1)在运行时加载外部脚本
2)注入该函数自定义AngularJS服务和工厂,然后执行它。
是否可以这样注射?
答案 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");
另请注意,该服务的实例将与注入您的应用的实例不同。
你应该重新评估为什么你需要这样做。
修改强>
要获得与应用程序获得的服务相同的服务实例,您需要获取相同的注入器实例。要做到这一点,您需要从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");