2016-01-27 16 views
3

я следующий код ...

$timeout(function(test){ 
    console.log(test.num); 
},0, true, {num:9}); 

Однако, тест всегда нуль, так как я должен пройти в переменных?

+0

Он работает мной .. –

ответ

3

Ваш код верный. Однако вы используете более старую версию AngularJS, которая не поддерживает 4-й параметр. Вам нужна хотя бы версия 1.4.0.

Обычно вам не нужно передавать параметры явно, потому что они определены в охватывающей области и видны в закрытии. Это работает так:

var param = {num:9}; 
$timeout(function(){ 
    console.log(param.num); 
}); 

Если вам нужно передать параметр в явном виде - как правило, потому что вы должны сохранить значение некоторых изменяющиеся переменным -, ответ @ Pankaj-Parkar обеспечивает хорошее решение. Тем не менее, мне нравится это лучше так:

$timeout((function(test) { 
    return function() { console.log(test.num) } 
})({num: 9})); 
+0

OMG вы правы, я полностью думал, что я бегу 1,4 – Jackie

+0

Я до сих пор проигрышные переменные по некоторым причинам, я думаю, потому что это в для цикла, и я пытаюсь перейти к индексу. Вот почему мне это нужно. – Jackie

+0

Вы правы, в этом случае вам нужно сохранить значение счетчика. Вы также можете использовать дополнительную переменную внутри тела цикла, если вам не нравятся сразу вызываемые функции. – lex82

2

Вы можете сделать это самостоятельно.

(function(test){ 
    $timeout(function(){ 
    console.log(test.num); 
    },0, true, {num:9}); 
})({num: 11}); 

в любом случае ваш $timeout будет что test доступна, если ее определить снаружи.

Смежные вопросы