Angular JS:使用$ interval刷新服务数据

时间:2015-11-06 10:04:32

标签: angularjs service

我正面临以下问题:

在我的AngularJS应用程序中,我有服务,包括数据和功能,刷新它们

angular.module('testService', ['ui.router'])
.factory('testService', function($http) {

  var service = {};

  var _baseUrl = 'http://127.0.0.1:8000/api/v1/test/';
  service.orders = {created: 0, approved: 0};

  /*
  * get number of unprocessed orders
  */

  service.updateNOrders = function(){
    var tableName = 'orders?stats=true';
    $http({
      method: 'GET',
      url: _baseUrl + tableName,
    }).success(function(data){
      service.orders = data;
      console.log(data);
      return;
    }).error(function(err){
      alert(JSON.stringify(err));
      return;
    })
  }
});

我可以将此服务注入ie指令并调用函数updateNOrders来更新指令中的数据。

但我想要的是服务每隔n秒调用一次这个函数。

服务在几个指令中共享,而不是每个指令,负责更新数据,我希望服务自己做。

我尝试过像:

angular.module('testService', ['ui.router'])
.factory('testService', function($http, $q, $rootScope, $interval) {

  $interval(console.log('test'),1000);

  /*
  rest of the code
  */


});

但这不起作用。

那么 - 是否可以每分钟左右调用updateNOrders内的testService函数?

2 个答案:

答案 0 :(得分:0)

为什么不在一定的时间间隔内从控制器调用服务功能。

 $interval(testService.functionName,1000);

答案 1 :(得分:0)

创建具有副作用的服务是个坏主意。最好使用通过回调设置间隔的方法创建服务。然后你可以在运行回调中注入你的服务(只运行一次callback回调):



angular.module('testService', ['ui.router'])
.factory('testService', ['$interval', function($interval) {

  var service = {};

  service.doPeriodicAjaxRequest = doPeriodicAjaxRequest;

  function doPeriodicAjaxRequest() {
    $interval(yourCode, ...);
  }

  return service;

}]);




然后:



angular.module('', [])
  .run(['testService', function (testService) {
    testService.doPeriodicAjaxRequest();
  }]);