我正在开发一个离子移动应用程序,我需要将参数传递给$ 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变量。
我做错了吗?或者,还有另一种方法吗?
由于
答案 0 :(得分:8)
这是introduced angular 1.4.x的新参数。因此,您可能尝试将其与angular 1.3 or lesser version一起使用。
如果使用正确版本的角度,您的示例应该可以正常工作。
$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);