如何将工厂模块传递给另一个模块?

时间:2013-01-31 20:12:57

标签: jquery module angularjs

我正在设置两种自定义方法。一个用于整个应用程序的全局通信,另一个用于处理http请求。我的http请求模块需要我的GlobalService才能运行。如何将GlobalService提供程序传递给CustomHTTP提供程序?

CustomHTTP

angular.module("customHTTPService", []).factory("$chttp", [
  "$http", "GlobalService", function($http, $parse) {
    var chttp;
    return chttp = function(method, url) {
      return $http({
        method: method,
        url: GlobalService.apiRoot + url
      }).success(function(data, status, headers, config) {
        return [data, status, headers, config];
      }).error(function(data, status, headers, config) {
        return [data, status, headers, config];
      });
    };
  }
]);

我的全球服务提供商

angular.module('GlobalService', []).factory("GlobalService", function($rootScope) {
  var sharedService, _ref;
  sharedService = {};
  return sharedService.apiRoot = (_ref = window.location.hostname) === "0.0.0.0" || _ref === "localhost" ? "http://localhost:3000/api/" : "http://website.com/api/";
});

最后......我的app实例化

window.app = angular.module('web_client', ['GlobalService', 'customHTTPService'], function($routeProvider, $locationProvider) {});

然后测试一下,我把它扔在我的一个控制器中:

this.SettingsController = function($scope, $location, GlobalService, $http, $chttp) {
  $.v = $chttp;
};

然后我尝试在控制台中运行它..

$.v('get', '/index.html');

返回:

ReferenceError: GlobalService is not defined

如果我把它放在我的customHTTPService模块中,或者甚至更上游一点..:

console.log(GlobalService);

我得到了同样的错误。

将模块相互传递的正确方法是什么?有什么我可以做得更好吗?

1 个答案:

答案 0 :(得分:1)

您的customHTTPService模块需要将GlobalService模块列为依赖项。

angular.module("customHTTPService", ['GlobalService'])

但是,首先需要进行更改,以便在GlobalService之前定义customHTTPService,否则依赖项将失败。

您可以阅读有关模块和依赖项here的更多信息。