2017-01-09 6 views
0

내 응용 프로그램에 timer 기능이 있습니다. 사용자는 타이머를 시작하여 특정 작업을 완료하는 데 걸린 시간을 측정 할 수 있습니다. 나는 총 시간을 얻을 수 있도록 백엔드에서 시작 시간과 종료 시간을 유지합니다. 하지만 사용자에게 경과 된 시간을 표시해야합니다. 나는 $timeout 함수를 사용하여 매초마다 함수를 호출하여 시간을 표시합니다.

function displayTime(){ 
       time = time + 1; 
       var hours,minutes,seconds; 
       hours = parseInt((time/3600)%24); 
       minutes = parseInt((time/60)%60); 
       seconds = time%60; 
       $scope.timer = hours+ ":"+minutes+":"+seconds; 
       t = $timeout(displayTime,1000); 
      } 

하지만 탭을 전환 할 때 $ 시간 제한 기능은 비활성 또는 감속 및 표시 시간이 아래로 상당히 느려집니다. 이 문제를 해결할 방법이 있습니까? 사용자가 탭을 전환 한 정확한 시간을 찾을 수 있습니까?

+0

$ 간격으로 사용해보십시오. 문서 링크 : https://docs.angularjs.org/api/ng/service/$interval –

답변

1

"$ timeout"대신 "$ interval"서비스를 사용하십시오.

angular.module('myApp',[]) 
    .controller('exampleCtrl', function($scope, $interval) { 

     var timeInterval; 

     function startDisplayTime(time) { 
      var fnTime = function(t) { 
       var hours,minutes,seconds; 
       hours = parseInt((t/3600)%24); 
       minutes = parseInt((t/60)%60); 
       seconds = t%60; 
       $scope.timer = hours+ ":"+minutes+":"+seconds; 
      }; 

      var ntime = time + 1; 
      timeInterval = $interval(fnTime(ntime), 10000); 
     } 

     function stopDisplayTime() { 
      $interval.cancel(timeInterval); 
     } 


     .... 


     startDisplayTime(someLogicForGetTime()); 
    }); 
+0

작동합니다! $ timeout과 $ setInterval의 차이점은 무엇입니까? –

+0

1) 간격 : 매번 실행됩니다. 2) timeout : 한 번만 실행됩니다. –