AngularJS:相互连接两个服务

时间:2014-10-30 14:44:14

标签: angularjs

我有以下服务:

dataService(应该从apiService获取数据,然后对数据进行排序/分组/过滤)。 apiService(应该从服务器获取数据。此外,当更新数据进入(websockets)时,数据应该被推送到dataService)。

现在,看起来,两个服务无法相互连接。 我的dataService现在如何获得更新?我有以下想法,但我不确定,如果这是最佳做法:

  • dataService调用apiService.init()
  • apiService.init()中的
  • :从API / Server获取数据并将其安全地保存在var data
  • dataService然后通过$ watch从apiService.data获取数据,因此每次数据更新时,都会通知dataService。
你怎么看?有没有更好的方法呢?非常感谢你!

修改

这不起作用:

var apiService = angular.module('apiService', []);

apiService.service('apiService', ['$http', 'dataService', function($http, dataService) {
    return {
        foo: "foo"
    };
}]);


var dataService = angular.module('dataService', []);

dataService.service('dataService', ['$http', 'apiService', function($http, apiService) {
    return {
        foo: "foo"
    };
}]);

编辑2:

将在Firebug中显示我:

错误:[$ injector:cdep] http://errors.angularjs.org/1.2.26/ $ injector / cdep [...]

1 个答案:

答案 0 :(得分:1)

由于它们之间存在循环依赖关系,您的服务无效。

您提出的解决方案应该可以正常工作,但可以通过使用promises进一步改进,例如下面的伪代码:

var apiService = angular.module('apiService', []);

// Note that 'apiService' no longer has 'dataService' as a dependency
apiService.factory('apiService', ['$http',
  function($http) {
    return {
      get: function() {
        // Return $http promise
        return $http.get(...);
      }
    };
  }
]);


var dataService = angular.module('dataService', []);

// Now, only 'dataService' depends on 'apiService'
dataService.factory('dataService', ['$http', 'apiService',
  function($http, apiService) {
    return {
      // This can further return a promise like below
      get: function() {
        return apiService.get()
          // Execute 'then' once the promise returned by the apiService.get() is resolved (i.e. date received)
          .then(function(response) {
            console.log(response);
          })
      }
    };
  }
]);

相关问题