사용 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 함수로 래핑 할 수 있습니까?
'의 사용은 [코드 냄새 (https://en.wikipedia.org/wiki/Code_smell) 표시이다 더 깊은 문제를 이 경우'$ q.defer'는'$ http' 요청에 오류가 있으면 결코 해결되지 않습니다. 답변을 작성하려면 데이터에 대해 더 많이 알아야합니다. 'data.pages' 란 무엇입니까? 그리고'$ http' 호출마다 어떻게 바뀌나요? – georgeawg
먼저 컨트롤러에서 작동하도록 제안하는 것이 좋습니다. 그런 다음 서비스에 넣는 방법을 파악하십시오. – georgeawg
'loadAll (0)'은 무엇을 반환합니까? 'loadAll (1)'은 무엇을 반환 할까? – georgeawg