无法从$injector.get()中获取服务实例

17 浏览
0 Comments

无法从$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');

0
0 Comments

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'],也可以解决这个问题。

0