【问题标题】:How does one pass a factory module into another?如何将一个工厂模块传递给另一个?
【发布时间】:2013-01-16 01:22:18
【问题描述】:

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

自定义HTTP

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

最后......我的应用实例化

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

我得到同样的错误。

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

【问题讨论】:

    标签: jquery module angularjs


    【解决方案1】:

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

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

    但是,首先你需要改变你的GlobalServicecustomHTTPService之前定义,否则依赖会失败。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-04
      • 2019-01-26
      • 2019-06-14
      • 1970-01-01
      • 2020-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多