0

У меня возникают проблемы с заполнением 2 графиков высоких диаграмм на одной странице с использованием фабричной или конечной точки обслуживания для автоматического захвата моих данных. Ive настраивает директиву, которая работает нормально, я вижу, что связанный элемент и 2 диаграммы появляются, проблема в том, что фабрика/служба перезаписывают свои предыдущие данные новым набором данных последнего вызываемого api. Таким образом, я могу видеть 2 диаграммы, но только 1 был правильно напечатан, другой пуст, потому что он получает пустые данные (или идентичные данные). У меня есть отдельные контроллеры, я не уверен, почему эта фабрика/служба истекает кровью от одного к другому.данные фабрики/службы заменяются следующим вызовом конечной точки API

Контроллер:

.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 
      } 
     }); 
    }]) 

Factory/Услуги:

.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> 

Ive пытался как пропусканием обещание и перенести методы, ив .then пытался, я не могу похоже, работают над тем, как ударить по определенной конечной точке (например, как я получил ее на своем заводе, поскольку она настроена с помощью api _path) и запросить 2 json blobs данных для заполнения 2 независимых графиков на одной странице.

Любая помощь была бы фантастической, застрявшей на этом какое-то время, искала далеко и широко, но я думаю, что им не хватает чего-то ключа.

Примечание: Я изменил имена областей/контроллеров, так как это частный проект, который я не хочу, чтобы имена были выпущены (если кто-то заметил ошибку правописания или переменную, которая не совпадает, весь код работает отлично на этой стороне).

ответ

1

Служба $http возвращает обещание. Не нужно создавать его с помощью $q.

Factory/Услуги:

.service('liveStats', ['$http', '$q', function($http, $q){ 
    this.getLiveStats = function (config) { 
     return $http.get(API_PATH+'live_stats/salesbyday',config); 
    } 
}]) 
+0

Вы также можете удалить инъекции '$ q', так как это не имеет значения. – Makoto

+0

Конечные точки достигаются правильно, передавая в конфиг функции, но im все равно получает только одну возвращаемую данные конечной точки, а не одновременно, чтобы разделить контроллеры с использованием одной и той же службы. Конечная точка прогноза перезаписывает конечную точку продаж. –

+0

все еще havent решил эту проблему, был бы очень признателен за некоторую дополнительную помощь, @georgeawg был полезен, но я не получал данные по назначению. –

Смежные вопросы