@Boogie1989

Как передать данные после запроса с сервиса в контроллер?

На данный момент у меня есть страничка при входе на которую с контроллера отправляется около 10 запросов для получения инфы. Такой вариант ни куда не годится так как при каждом повторном входе инфа запрашивается заново. Решил переделать все в сервис. Получилось что то вроде такого :
.factory('Widget1DataService', Widget1DataService);

    /** @ngInject */
    function Widget1DataService(TodayTabService, $q) {
        var widget1 = {};
        widget1.setData = function(data) {
            if (!widget1.data) {
               widget1.data={};
                $q.all([
                    $http.post("/products/count/today", date),
                    $http.post("/out/today", date)
                ]).then(function(response) {
                    widget1.data1 = response[0];
                    widget1.data2 = response[1]
               });
            }
        }
        return widget1;
    }

В контроллере я определяю переменные :
var vm=this;
vm.data1 = Widget1DataService.data1.count;
vm.data2= Widget1DataService.data2.count.today;


Но проблема в том что ни Widget1DataService.data1.count ни Widget1DataService.data2.count.today на этот момент еще нету, так как не пришли еще. Как сделать все это правильно?
  • Вопрос задан
  • 132 просмотра
Решения вопроса 1
AMar4enko
@AMar4enko
function Widget1DataService($q, $http) {
  var dataPromise;
  this.getData = getData;

  function getData(date) {
    if (dataPromise) return dataPromise;
    dataPromise = $q.all([
                    $http.post("/products/count/today", date),
                    $http.post("/out/today", date)
                ]).then(function(response) {
                    return {
                      data1: response[0],
                      data2: response[1]
                    };
               });
    return dataPromise;
  }  
}

Widget1DataService.getData(...)
  .then(function(data) {
    $scope.widgetData = data;
  });
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы