2013-07-24 105 views
1

我处于需要频繁轮询我的服务器数据的位置。我查看了人们如何在angularjs中处理这个问题,而且我很困惑。在angularjs中使用计时器的投票服务器

一些例子只是简单的增加/减少的计数器。其他正在使用$超时服务。我需要能够通过点击按钮打开/关闭此功能。 I.E.点击开始轮询,每30秒轮询一次,点击按钮停止轮询。

回答

1

我并不是声称自己擅长处理javascript或角色,所以请放轻松。我没有写我自己的服务,便使用setInterval和clearInterval:

angular.module('myModule', []) 
    .factory('TimerService', 
    function() { 
     var timers = {}; 

     var startTimer = function(name, interval, callback) { 
     // Stop the timer if its already running, no-op if not running 
     stopTimer(name); 

     timers[name] = setInterval(function() { 
      callback(); 
     }, interval); 

     // Fire right away, interval will fire again in specified interval 
     callback(); 
     } 


     var stopTimer = function(name) { 
     var timer = timers[name]; 
     if (timer) { 
      clearInterval(timer); 
      delete timers[name]; 
     } 
     } 

     return { 
     start: startTimer, 
     stop: stopTimer 
     }; 
    }); 

然后在我的控制器,我这样做:

var timerARunning = false; 
    $scope.onClickA = function() { 
    var timerName = 'timerA'; 
    timerARunning = !timerARunning; 

    if (timerARunning) { 
     TimerService.start(timerName, 5000, function() { 
     alert("Timer A just fired"); 
     }); 
    } else { 
     TimerService.stop(timerName); 
    } 
    }