作者:睿哲小宝贝 | 来源:互联网 | 2023-05-28 16:36
我希望能够在运行时执行自定义外部脚本,并允许他们访问我的AngularJS自定义服务和工厂.
加载的脚本不应该是控制器,因为我没有兴趣将它们链接到任何视图.
看起来应该是这样的:
1)在运行时加载外部脚本
我着眼于:https://github.com/urish/angular-load
该脚本将具有单个非AngularJS函数
2)注入该函数自定义AngularJS服务和工厂,然后执行它.
是否有可能注入这种方式?
1> New Dev..:
在你问的时候回答这个问题 - 是的,你可以做这样的事情.
您可以使用它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
您应该重新评估为什么需要这样做.
编辑
要获得与应用程序获得的服务相同的实例,您需要获得相同的注入器实例.要做到这一点,您需要injector
在Angular的应用程序中对象来自DOM元素.例如,让我们说
你的应用程序:
// make sure that body has loaded (for example, in window.onload)
var injectorInstance = angular.element(document.body).injector();
var fooSvcInstance = injectorInstance.get("FooSvc");
更新了Plunker