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

时间:2018-09-05 13:54:09

标签: jquery angularjs

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

can't get service instance from $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);
            };
        };
    });
});

我们可以使用以下代码获取Service实例。

var injector = angular.injector(['myDI', 'ng']); //Add this line
var greeting = injector.get('greeting');
greeting('Ford Prefect');
var injector = angular.injector();

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

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

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

非常感谢。

1 个答案:

答案 0 :(得分:0)

这里有很多东西:

  • 您不能在提供商定义级别注入服务。它们仅取决于使用angular.const和angular.config定义的内容(也许还有更多,我不再记得了)。因此,您不能以这种方式注入$ http或$ q。
  • 如果要在yoru服务中注入服务,则必须在工厂定义级别($ get)注入它们
  • 为简化起见,请不要在配置中定义您的提供程序
  • $ http或$ q不在默认模块中。要访问这些服务,必须导入包含它的“ ng”模块。

此处已更正,在上面我添加了一种配置您的提供程序的方法。 您可以通过以下插件访问它: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");

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