无法从$injector.get()中获取服务实例
无法从$injector.get()中获取服务实例
我定义了一个名为"greeting"的客户服务,但是无法从$injector.get('greeting')获取实例。它将抛出如下错误:未知提供者:greetingProvider <- greeting。那么获取它的正确方式是什么?以下是代码:
var app = angular.module('myDI', []); app.config(function($provide){ $provide.provider('greeting', function(){ this.$get = function(){ return function(name) { console.log("Hello, " + name); }; }; }); }); var injector = angular.injector(); var greeting = injector.get('greeting'); greeting('Ford Prefect');
can't get service instance from $injector.get()这个问题的出现的原因是在使用angular.injector()方法时没有正确指定依赖的模块。在上述代码中,使用了angular.injector(['myDI', 'ng'])来创建injector,其中'myDI'是自定义的模块,'ng'是Angular的核心模块。通过指定这两个模块,可以确保在创建injector时能够获取到所需的依赖。
解决方法是在创建injector时正确指定依赖的模块。在上述代码中,通过添加一行代码var injector = angular.injector(['myDI', 'ng']);来创建了正确的injector,从而解决了该问题。
另外,还可以注意到在angular.injector()方法中只指定'myDI'模块也是可以正常工作的,不需要添加'ng'模块。但需要确保从相同的模块中获取provider,这一点很重要。
需要注意的是,这个问题在angular 1.3.X版本中已经不再适用,具体可以参考这个链接。另外,如果改变依赖的顺序,即['ng', 'myDI'],也可以解决这个问题。