我正在尝试运行一个函数并将服务注入其中。我认为可以使用$injector
轻松完成。所以我尝试了以下(简化示例):
angular.injector().invoke( [ "$q", function( $q ) { $q.something(); } ] );
结果为Uncaught Error: [$injector:unpr] Unknown provider: $qProvider <- $q
。
我知道我可以通过使用angular.injector( ["ng"] )
来解决这个问题,但实际上还有几个依赖项。
如果我能够检索在我的应用程序中的其他地方使用的注入器实例,那将完全没问题。
documentation for angular.injector
表示您可以使用angular.element(document).injector()
检索它,但这会导致我undefined
。
答案 0 :(得分:10)
您不应该需要这个,但是您可以使用应用程序的根元素(或任何子元素)获取应用程序的$ injector。
例如,如果你在身体上使用ngApp
:
angular.element(document.body).injector();
答案 1 :(得分:1)
ExpertSystem的答案非常适合我
这对我来说很有效。我正在尝试从文档“resume”事件中的角度范围之外的角度服务调用函数,以便在我的cordova应用程序中使用。这是我使用的代码
var injector = angular.element(document.body).injector(); //get the document
injector.invoke(['myService', function (myService) {
myService.doSomething();
}]);
答案 2 :(得分:0)
试试这个:
var $injector = angular.injector(['myApp','ng'])
对于$location
,您需要将应用程序引导到页面(启动应用程序):
var $injector = angular.bootstrap(document, ['myApp'])
每次调用时都会返回注入器,但如果脚本已经加载,则不会产生任何冲突。