我在使用工厂或服务端点在单个页面上填充2个highcharts图表以自动获取数据时遇到问题。我设置了一个工作正常的指令,我可以看到绑定的元素和2个图表出现,问题是工厂/服务用最后一个被调用的api的一组新数据覆盖他们以前的数据。所以我可以看到2个图表,但只有1个图表被正确绘制,另一个是空白的,因为它获得了空白数据(或相同的数据)。我有单独的控制器,我不知道为什么这个工厂/服务从一个到另一个流血。
控制器:
.controller('getSalesByDay', ['$scope', 'liveStats', function($scope, liveStats){
var promise = liveStats.getLiveStats({api_path: 'salebydayorhour'});
promise.then(function (saledata){
$scope.saleData = saledata.data.count
$scope.axisInfo = {
categories: saledata.data.date
}
})
}])
.controller('getForeCastByDay', ['$scope', 'getForeCastByDay', function($scope, getForeCastByDay) {
$scope.getForecastByDay = getForecastByDay.query({api_path: 'getforecastdata'})
.$promise.then(function (forecast) {
$scope.forecastData = forecast.count;
$scope.axisInfo = {
categories: forecast.date
}
});
}])
工厂/服务:
.service('liveStats', ['$http', '$q', function($http, $q){
var deferred = $q.defer();
$http.get(API_PATH+'live_stats/salesbyday', {api_path: '@api_path'})
.then(function (data){
deferred.resolve(data);
});
this.getLiveStats = function () {
return deferred.promise;
}
}])
.factory('getLiveStats', ['$resource', function($resource) {
return $resource(API_PATH+'live_stats/:api_path', {api_path: '@api_path'},
{
query: {
isArray: false
}
}
);
}])
模板:
<div ng-controller="getSalesByDay">
<div ng-if="salesData">
<datachart data="salesData" axis="axisInfo"></datachart>
</div>
</div>
<div ng-controller="getForecastByDay">
<div ng-if="forecastData">
<datachart "data="forecastData" axis="axisInfo"></datachart>
</div>
</div>
我试过传递承诺和推迟方法,我试过。然后,我似乎无法找到如何命中一个特定的端点(比如我在我的工厂得到它,因为它是用api_path配置定制的)和请求2个json blob数据在一个页面上填充2个独立的图形。
任何帮助都会很棒,现在已经坚持了一段时间,搜索的范围很广,但我觉得我错过了一些关键。
注意:我更改了范围/控制器名称,因为这是一个私人项目,我不希望发布的名称(如果有人发现拼写错误或变量不匹配,所有代码在这一方面工作正常)。
答案 0 :(得分:1)
$http
服务返回一个承诺。无需使用$q
创建一个。
工厂/服务:
.service('liveStats', ['$http', '$q', function($http, $q){
this.getLiveStats = function (config) {
return $http.get(API_PATH+'live_stats/salesbyday',config);
}
}])