2016-06-01 3 views
0

대시 보드에 여러 템플릿이 있습니다.ajax 템플릿 용 앵귤러 및 프리 로더

템플릿 중 하나에 간단한 목록이 있습니다. 내 ling-repeat을 사용하고 있습니다. 그런 식으로 내 목록을 동적으로 유지합니다. 하지만 여기에있는 것이 있습니다 -

$http을 사용하여이 목록의 데이터를 얻었으므로 두 번째 또는 두 번째 빈 목록이있을 수 있습니다.

좋은 해결책은 기본적으로 내 목록에 프리 로더를 추가하는 것이지만 논리를 추가하는 방법을 제안 하시겠습니까? 가장 쉬운 방법은 다음과 같이 추가하는 것입니다.

$http({ 
    method: 'GET', 
    url: './data/websites.json' 
}).then(function successCallback(response) { 
    // hide preloader, etc 
}); 

올바른 방법일까요?

또한 템플릿 변환을 제어 할 수 있습니까? 사용자가 페이지를 떠날 때, 예를 들어, 나는 X 밀리 초에 대한 프리 로더를 보여주고 싶은, 단지 다음 요청 된 페이지

+1

절대 간단한 것은 'ng-show'와 범위 변수입니다. '그때'에 거짓을 설정하십시오. 제가 좋아하는 한 모듈은'cg-busy '입니다. 그냥'$ http' 약속을 전달하면 나머지는 모두 – charlietfl

+0

흥미 롭습니다. 나는 그것을 시도 할 것이다! – user3800799

답변

1

지시를하는 것이 좋습니다로 이동하지 당신을 위해 모든 것을 :

angular.module('directive.loading', []) 

    .directive('loading', ['$http' ,function ($http) 
    { 
     return { 
      restrict: 'A', 
      link: function (scope, elm, attrs) 
      { 
       scope.isLoading = function() { 
        return $http.pendingRequests.length > 0; 
       }; 

       scope.$watch(scope.isLoading, function (v) 
       { 
        if(v){ 
         elm.show(); 
        }else{ 
         elm.hide(); 
        } 
       }); 
      } 
     }; 

    }]); 

이 지시어를 사용하면 로딩 애니메이션 요소에 '로딩'속성을 부여하기 만하면됩니다.

<div class="loading-spiner-holder" data-loading ><div class="loading-spiner"><img src="..." /></div></div> 
+0

이것은 꽤 좋은 것, 나는 그것을 시도 할 것입니다. 감사! – user3800799

+1

시도해 보셨습니까? 너를 위해 일 했니? –

+0

조금만 조정해야했지만 전반적으로 좋은 대답이었습니다. – user3800799