我有以下服务:
dataService(应该从apiService获取数据,然后对数据进行排序/分组/过滤)。 apiService(应该从服务器获取数据。此外,当更新数据进入(websockets)时,数据应该被推送到dataService)。
现在,看起来,两个服务无法相互连接。 我的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 [...]
答案 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);
})
}
};
}
]);