2017-01-09 7 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); 
      } 

しかし、タブを切り替えると、$ timeout関数は無効になるか遅くなり、表示される時間が大幅に遅くなります。この問題を解決する方法はありますか?ユーザーがタブを切り替える正確な時刻を見つけることはできますか?

+0

$ intervalで試してみてください。ドキュメントへのリンク: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)タイムアウト:1回だけ実行されます。 –

関連する問題