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

Posted

技术标签:

【中文标题】无法从 $injector.get() 获取服务实例【英文标题】:can't get service instance from $injector.get() 【发布时间】:2013-07-27 16:18:23 【问题描述】:

我定义了一个名为“greeting”的客户服务,但无法从 $injector.get('greeting') 获取实例。它会抛出这样的错误:Unknown provider: greetingProvider 。那么获得它的正确方法是什么?以下是代码:

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');

【问题讨论】:

你在询问注入器时没有传递任何模块。但是您的问候服务是在 myDI 模块中定义的。见docs.angularjs.org/api/angular.injector 最重要的是:你为什么要直接使用injector?在单元测试之外使用它是非常非常罕见的......另见***.com/q/13400687/1418796 【参考方案1】:

您需要从模块中创建注入器。

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(['myDI', 'ng']); //Add this line
var greeting = injector.get('greeting');
greeting('Ford Prefect');
var injector = angular.injector();

在这里试试。 FIDDLE

【讨论】:

看来 angular.injector(['myDI']) 也可以正常工作,不需要'ng' @jason 很高兴知道。我没试过。但关键是要确保从保存模块中获取提供程序。 这停止在 Angular 1.3.X github.com/angular/angular.js/issues/9692 中工作 如果我切换依赖项的顺序似乎可以工作:['ng', 'myDI']

以上是关于无法从 $injector.get() 获取服务实例的主要内容,如果未能解决你的问题,请参考以下文章

如何摆脱 TypeScript 中的 $injector 类型错误?

AngularJs依赖注入写法笔记

Docker基础:安装RabbitMQ服务 #私藏项目实操分享#

从javascript 调用angular的函数

ReferenceError:注入未定义茉莉花

在anjular中 function中的$scope和$rootscope有啥区别