切换选项卡时AngularJS$超时处于非活动状态

切换选项卡时AngularJS$超时处于非活动状态,angularjs,settimeout,Angularjs,Settimeout,我的应用程序中有一个计时器功能。用户可以启动计时器来测量完成特定任务所需的时间。我将开始时间和结束时间保留在后端,以便获得总时间。但是我需要向用户显示经过的时间。我使用$timeout函数每秒调用一个函数来显示时间 function displayTime(){ time = time + 1; var hours,minutes,seconds; hours = parseInt((time/3600)%

我的应用程序中有一个计时器功能。用户可以启动计时器来测量完成特定任务所需的时间。我将开始时间和结束时间保留在后端,以便获得总时间。但是我需要向用户显示经过的时间。我使用
$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);
           }
但当切换tab时,$timeout函数处于非活动状态或变慢,并且显示的时间显著变慢。有没有办法解决这个问题?我可以找到用户切换选项卡的确切时间吗?

使用“$interval”服务而不是“$timeout”


尝试使用$interval。链接到文档:它工作!$timeout和$setInterval之间的区别是什么?1)interval:它每次都运行。2) 超时:它只运行一次。
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());
    });