使用provider()和factory()注册服务 - 后者找不到$ http

时间:2014-02-20 15:00:07

标签: angularjs

我正在创建一个包含一些服务的新模块。我注册了以下服务:

myModule.provider("surveySrv", ["$http", function ($http) {
  var httpSrv = $http;
  return {
    $get: function () {
      return {
        getall: function () {
          return httpSrv.get("/api/survey/all");
        },
        remove: function (survey) {
          // ...
        }
      };
    }
  };
}]);

我收到错误由于以下原因导致无法实例化模块ilgServices: 未知提供商:$ http

无法弄清楚原因。 但是如果我用工厂方法注册它就可以了:

myModule.factory("surveySrv", ["$http", function ($http) {
    return {
      getall: function () {
      return $http.get("/api/survey/all");
    },
    remove: function (survey) {
      //return $http.get()
    }
  };
}])

我在GitHub上得到了这个解释:

您只能将内容注入提供程序的$ get属性。 $ get属性被注入到您的控制器/指令/服务中。提供者的主体主要用于配置块以改变提供者的行为。

但是有一个问题 - 如何“将内容注入$ get属性”?

1 个答案:

答案 0 :(得分:1)

在配置阶段调用module#provider时,只允许注入提供者。

您可以将服务注入$ get函数,如下所示:

myModule.provider("surveySrv", function () {     
  return {
    $get: ["$http", function ($http) {
      return {
        getall: function () {
          return $http.get("/api/survey/all");
        },
        remove: function (survey) {
          // ...
        }
      };
    }]
  };
});