如何在AngularJS中使用$ timeout运行带参数的函数?

时间:2014-04-05 02:58:59

标签: javascript angularjs

我的AngularJS控制器中有这个功能。它看起来像这样;

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

它使用AngularJS中的$timeout服务来保持自己的调用。这有效,直到我想为此poll函数添加参数。对于添加的参数,我的代码看起来像这样;

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

语法不可接受,我现在不知所措。如何在AngularJS中使用$timeout执行带参数的函数?如果无法做到这一点,是否有解决此问题的方法?我想让我的poll函数接受参数。

3 个答案:

答案 0 :(得分:46)

$ timeout是Angular的window.setTimeout包装器。当然,就像setTimeout一样,它支持将附加参数传递给超时fn。

来自AngularJS API:

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

[fn] (功能)是你的功能
[延迟] (数字)以ms为单位的延迟 [invokeApply] (boolean)默认为true,如果为true,则fn在$ apply内运行,如果为false,则跳过模型脏检查。
[通过] 其他参数!这就是你想要的!

您的代码应该如何:

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

这是将参数传递给超时fn的正确方法。我希望你觉得这很有用。

编辑:此功能于2015年1月22日(v1.4.1)添加,在该版本之前,正确的方法是:

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

答案 1 :(得分:32)

因为$timeout的第一个参数类型是函数,所以你需要这样做:

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

答案 2 :(得分:9)

使用匿名函数可能是最简单的方法。

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