我的问题是下面给出的问题链接的扩展
无法从 $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