无法从 $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 类型错误?