我的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函数接受参数。
答案 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);