无法从具有依赖项的 $injector.get() 获取服务实例



我的问题是下面给出的问题链接的扩展

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

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

但是如果我在服务中添加依赖项,例如...

var app = angular.module('myDI', []);
app.config(function($provide){
$provide.provider('greeting',['$http','$q' function($http,$q){
this.$get = function(){
return function(name) {
console.log("Hello, " + name);
};
};
});
});

我们将如何使用角度喷油器获取服务实例。

多谢。

这里有很多东西:

  • 不能在提供程序定义级别注入服务。它们只依赖于 angular.const 和 angular.config 所定义的内容(也许还有更多的东西,我已经不记得了(。所以你不能以这种方式注入$http或$q。
  • 如果要在 Yoru 服务中注入服务,则必须在工厂定义级别($get(注入它们
  • 为了简化,不要在配置中定义您的提供程序
  • $http或$q不在默认模块中。要访问这些服务,您必须导入包含它的"ng"模块。

这是更正的,我在其上添加了一种配置提供程序的方法。 您可以在此 plunker 上访问它:http://jsbin.com/yajomecoxi/edit?js,console

var app = angular.module('myDI', ['ng']);
app.provider('greeting',function(){
var greetingToUser="Hello, ";
this.setGreeting=function(greet){
greetingToUser=greet;
}
this.$get = ['$http', '$q', function($http, $q){
return function(name) {
console.log(greetingToUser + name);
};
}];
});

app.config(['greetingProvider',function(greetingProvider){
greetingProvider.setGreeting("welcome to you ");
}])

var $injector = angular.injector(['myDI']);
var greeting = $injector.get('greeting');
greeting("sfgsdfg");

有关这些链接的更多信息:

  • https://docs.angularjs.org/guide/providers
  • https://docs.angularjs.org/api/ng/function/angular.module

最新更新