我正在学习AngularJS。
我想要做的是使用$ timeout在for循环中执行一个方法。
以下是示例:
for(var i = 0; i < 10; i++) {
$timeout(function(i) {
someMethod(i);
}, 1000);
}
function someMethod(i) {
console.log('Executed : ', i);
}
但我不能传递变量'i'。我怎样才能做到这一点?另外,我想知道如何用Angular $ interval()来解决这个问题。
谢谢!
答案 0 :(得分:8)
你需要将它包装在一个闭包函数中,传入i变量,然后它将在新函数的范围内变得可用..例如
for(var i = 0; i < 10; i++) {
(function(i){ // i will now become available for the someMethod to call
$timeout(function() {
someMethod(i);
}, i * 1000);
})(i); // Pass in i here
}
function someMethod(i) {
console.log('Executed : ', i);
}
请记住,$ timeout只是setTimeout的可测试性包装器。因此,请参阅http://jsfiddle.net/f1yfy6ac/3/了解此情况。
如果您想要使用$ interval,那么您可以使用:
$interval(someMethod, 1000)
无论如何,这将会传递给我。你不需要在循环中使用它。
答案 1 :(得分:1)
使用$ interval:
var i=0;
$interval(function(){
someMethod(i++);
}, 1000, 10);
function someMethod(i) {
console.log('Executed : ', i);
}
使用自执行函数,如Dave所说(带有for循环的$ interval): 您可以将所有调用的迭代限制为1,作为$ interval
的第三个参数for(var i = 0; i < 10; i++) {
(function(i){
$interval(function(){
someMethod(i);
}, 1000, 1);
})(i);
}