使用angularjs中的计时器轮询服务器

时间:2013-07-24 13:10:02

标签: angularjs

我所处的位置需要经常轮询我的服务器以获取数据。我已经看过人们如何在angularjs中处理这个问题而且我很困惑。

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

1 个答案:

答案 0 :(得分: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);
    }
  }