2017-09-21 5 views
0

사용 AngularJS와를 GET 내가 가지고 historicalDataController패턴이

angular.module('armsApp').controller('historicalDataController', ($scope, $historicalFactory) => { 
    $scope.histogram = new Histogram('#histogram'); 

    historicalFactory.getHistorycalData().then((data) => { 
    $scope.histogram.update(data); 
    }); 
}); 

및 historicalFactory

angular.module('armsApp').factory('historicalFactory', ['$q', '$http', 

    function ($q, $http) { 

    return { 

     getHistoricalData() { 
     const deferred = $q.defer(); 

     function loadAll(page) { 
      const token = cognito.getToken('id'); 
      // let deferred = $q.defer(); 

      return $http({ 
      // details 
      }) 
      .then((response) => { 

       if (response.data.pages > page) { 
       loadAll(page + 1); 
       } else { 
       deferred.resolve(response.data); 
       } 
      }); 
     } 
     loadAll(0); 
     return deferred.promise; 
     }, 

전자는 내 D3 히스토그램 요소를 관리하고 후자에 통신을 처리 내 데이터 서버.

from historicalDataController 나는 재귀를 사용하여 페이지 번호가 매겨진 REST 엔드 포인트로 직렬 GET을 수행하고 데이터를 집계하는 historicalFactory에서 함수를 호출하기 시작했습니다. 컨트롤러에서 현재 D3 히스토그램을 업데이트합니다.이 함수는 전체 데이터 집합과 함께 반환됩니다.이 데이터 집합은 정상적으로 작동합니다.

이제 점차적으로 각 GET의 결과로 히스토그램을 업데이트하고 싶지만 콜백은 UI 요소에 액세스 할 수없는 공장에 있으며 뷰 관련 논리가 거기에 속하지 않는 것처럼 느껴집니다.

여기에 사용할 수있는 좋은 옵션은 무엇입니까?

컨트롤러에서 증분 데이터를 변수에 쓰고 컨트롤러에 이벤트를 브로드 캐스트해야합니까? 어떻게 든 지저분 해집니다.

일부 종류의 크로스 모듈 데코레이터를 사용하여 Histogram-update 함수를 재귀 적 GET 함수로 래핑 할 수 있습니까?

+0

'의 사용은 [코드 냄새 (https://en.wikipedia.org/wiki/Code_smell) 표시이다 더 깊은 문제를 이 경우'$ q.defer'는'$ http' 요청에 오류가 있으면 결코 해결되지 않습니다. 답변을 작성하려면 데이터에 대해 더 많이 알아야합니다. 'data.pages' 란 무엇입니까? 그리고'$ http' 호출마다 어떻게 바뀌나요? – georgeawg

+0

먼저 컨트롤러에서 작동하도록 제안하는 것이 좋습니다. 그런 다음 서비스에 넣는 방법을 파악하십시오. – georgeawg

+0

'loadAll (0)'은 무엇을 반환합니까? 'loadAll (1)'은 무엇을 반환 할까? – georgeawg

답변

0

"알림"콜백을 사용하면 약속을 해결하지 않고 약속을 업데이트 할 수 있습니다. 통화 중 하나가 해결되면 deferred.notify()으로 전화하십시오. 컨트롤러에서는 .then()에 "catch"및 "notifiy"콜백을 제공하려고합니다.

$ q의 전체 설명서를 참조하십시오. https://docs.angularjs.org/api/ng/service/ $ q를

같은 http` $ '등의 약속 기반 서비스의 $ q.defer`