将参数传递给AngularJS $ timeout

时间:2015-05-25 22:54:07

标签: javascript angularjs ionic-framework

我正在开发一个离子移动应用程序,我需要将参数传递给$ timeout promise,这样我就可以使用该参数进行一些操作。 我读了有关$ timeout(https://docs.angularjs.org/api/ng/service/ $ timeout)的angularjs doc,它说最后一个参数可以是传递给超时函数的参数。我试过这个:

$timeout(function(params){
    alert(params.p1 + " - " + params.p2);
}, 5000, true, {p1 : "Hello", p2 : "World"});

但它不起作用,我无法访问超时函数中的params变量。

我做错了吗?或者,还有另一种方法吗?

由于

2 个答案:

答案 0 :(得分:8)

这是introduced angular 1.4.x的新参数。因此,您可能尝试将其与angular 1.3 or lesser version一起使用。

Example

如果使用正确版本的角度,您的示例应该可以正常工作。

 $timeout(function(p){
    console.log(p.a);
 },0, true, {a:1, b:2});

另外需要注意的是,您没有将此作为参数传递给超时承诺,它们只是传递给$timeout服务运行的函数的参数。如果要将参数作为超时承诺解析的值传递,则只返回值。

 $timeout(function(p){
    return p; //<-- return it
 },0, true, {a:1, b:2})
 .then(function(value){
     console.log(value)//<-- this is same as p
 });

如果您的真实目的是将参数传递给函数版本&lt; 1.4,然后将其移动到一个函数并调用它:

 function callIt(params){
    return $timeout(function(){ //Return promise if needed
       //Access params here from the outer closure of the function.
     })
 }

然后致电:

callIt({a:1, b:2});

答案 1 :(得分:3)

您尝试使用的参数已在1.4版本的angularjs中引入,该版本目前被认为是不稳定的(很可能您正在使用版本&lt; = 1.3 - $timeout docs)。

你可以尝试:

function makeHandler(handler, params) {
  return function() {
    handler(params);
  };
}

$timeout(makeHandler(function(params) {
  alert(params.p1 + " - " + params.p2);
}, {p1 : "Hello", p2 : "World"}), 5000);