2014-11-30 2 views
3

저는 AngularJS를 배우고 있습니다.

내가 원하는 것은 $ timeout을 사용하여 for 루프에서 메소드를 실행하는 것입니다. 여기

은 예입니다

for(var i = 0; i < 10; i++) { 
    $timeout(function(i) { 
     someMethod(i); 
    }, 1000); 
} 

function someMethod(i) { 
    console.log('Executed : ', i); 
} 

그러나 나는 '내가'변수 전달할 수 없습니다. 이것을 어떻게 할 수 있습니까? 또한 Angular $ interval()을 사용하여이 문제를 해결하는 방법을 알고 싶습니다.

감사합니다.

답변

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(someMethod, 1000) 

. 루프에서 사용하지 않아도됩니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 나는 어떤 방법 (초)이 매 초마다 전화 할 것을 기대하고있다. 나는 그것을 어떻게 할 수 있는가? – KimchiMan

+0

예 : 'Executed : 1'(1 초 후) 'Executed : 2'(1 초 후) ... – KimchiMan

+1

Ok 그것이 작동 할 수 있도록 업데이트되었습니다. 그러나 이것을 더 잘 수행 할 수있는 몇 가지 방법이 있습니다. https://docs.angularjs.org/api/ng/service/$interval –

1

$ 간격을 사용하여 : 데이브으로 기능을 실행 자체를 사용

var i=0; 
$interval(function(){ 
    someMethod(i++); 
}, 1000, 10); 


function someMethod(i) { 
    console.log('Executed : ', i); 
} 

(for 루프와 $ 간격) 말했다 : 당신은 $ 간격에 대한 세 번째 매개 변수로 모든 통화에 대해 1로 반복을 제한 할 수 있습니다

for(var i = 0; i < 10; i++) { 
    (function(i){ 
     $interval(function(){ 
      someMethod(i); 
     }, 1000, 1); 
    })(i); 
} 
+0

감사합니다. 하지만 for 루프와 함께 사용하고 싶습니다! 더 나은 접근 방법이 있습니까? – KimchiMan