Angular JS: использование $ interval для обновления служебных данных

0

Я столкнулся с следующей проблемой:

В моем приложении 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;
    })
  }
});

Я могу ввести эту службу в директиву и вызвать функцию 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 каждую минуту или около того?

Теги:
service

2 ответа

0
Лучший ответ

Создание сервиса с побочным эффектом - плохая идея. Лучше создать службу с помощью метода, который устанавливает ваш интервал с обратным вызовом. Затем вы можете ввести свою услугу в обратный вызов (выполнить обратный вызов вызовов только один раз):

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();
  }]);
  • 0
    это здорово. Я добавил некоторые проверки, чтобы эта функция не получала вызов несколько раз, и она прекрасно работает
0

Почему вы не вызываете функцию обслуживания с контроллера в определенный промежуток времени.

 $interval(testService.functionName,1000);
  • 0
    Я не использую контроллеры в приложении, только директивы

Ещё вопросы

Сообщество Overcoder
Наверх
Меню