如何从控制器获取单个$ interval()调用

时间:2014-03-21 21:29:36

标签: angularjs

我希望我的控制器每分钟刷新一些服务(需要调用web服务),所以我写道:

angular.module('App').controller('dashboardCtrl', function($scope, $interval, ServiceOne, ServiceTwo, ServiceThree) {
    ServiceOne.init();
    ServiceTwo.init();
    ServiceThree.init();
    //... n

    this.refreshServices = function() {
      ServiceOne.refresh();
      ServiceTwo.refresh();
      ServiceThree.refresh();
      //... n
    };

    $interval(funcion() {
      var self = this;
      self.refreshServices();
    });

});

问题是,控制器按角度触发2次,因此2 $interval同时工作。

如何避免这种情况?

1 个答案:

答案 0 :(得分:0)

首先,$ timeout只会在您设置的时间用完后执行一次刷新。

在我看来,这种逻辑是否属于控制器内部,应该移动到模块的.run()块,或者可能移到服务本身内部?

http://docs.angularjs.org/api/ng/service/ $超时

对于重复发生的事件,您最好使用$ interval: http://docs.angularjs.org/api/ng/service/美元区间#! $ interval的示例给出了如何避免两次启动间隔的示例。

在模块文档页面上查看.run(): http://docs.angularjs.org/guide/module