Подтвердить что ты не робот

Как запустить функцию с параметрами с использованием $timeout в AngularJS?

У меня есть эта функция внутри моего контроллера AngularJS. Это выглядит так:

polling_interval=1000;
var poll = function() 
{
  //Execution code
  $timeout(poll, polling_interval); 
}; 
poll();

Он использует службу $timeout в AngularJS, чтобы продолжать называть себя. Это работает до тех пор, пока я не захочу добавить параметры к этой функции опроса. Мой код выглядит так для добавленных параметров;

polling_interval=1000;
var poll = function(param1, param2) 
{
  //Execution code
  $timeout(poll(param1, param2), polling_interval); 
}; 
poll(param1, param2);

Синтаксис не был приемлемым, и я сейчас в недоумении. Как выполнить функцию с параметрами с помощью $timeout в AngularJS? Если это невозможно сделать, есть ли проблемы в этой проблеме? Я хотел бы, чтобы мои параметры функции приема принимали.

4b9b3361

Ответ 1

Поскольку первый тип параметра $timeout является функцией, вам необходимо сделать следующее:

polling_interval=1000;
var poll = function(param1, param2) 
{
  //Execution code
  $timeout(function() {poll(param1, param2)}, polling_interval); 
}; 
poll(param1, param2);

Ответ 2

$timeout - Angular wrapper для window.setTimeout. Естественно, так же, как setTimeout, он поддерживает передачу дополнительных параметров в тайм-аут fn.

Из API AngularJS:

$timeout([fn], [delay], [invokeApply], [Pass]);

[fn] (функция) - ваша функция
[задержка] (число) задержка в ms
[invokeApply] (boolean) по умолчанию соответствует true, в true, fn запускается внутри $apply, если false, он пропускает проверку модели.
[Pass] дополнительные параметры! Это то, что вы хотите!

Как выглядит ваш код:

polling_interval = 1000;
var poll = function(param1, param2){
    //Execution code
    $timeout(poll, polling_interval, true, param1, param2); 
}; 
poll(param1, param2);

Это правильный способ передачи параметров в тайм-аут fn. Надеюсь, вы сочтете это полезным.

EDIT: эта функция была добавлена ​​22 января 2015 г. (v1.4.1), до этой версии был бы правильный подход:

polling_interval = 1000;
var poll = function(param1, param2){
    //Execution code
    $timeout(poll.bind(null, param1, param2), polling_interval); 
}; 
poll(param1, param2);

Ответ 3

Использование анонимной функции, вероятно, будет самым простым способом.

polling_interval=1000;
var poll = function(param1, param2) 
{
  //Execution code
  $timeout(function () { poll(param1, param2) }, polling_interval); 
}; 
poll(param1, param2);