2015-05-25 12 views
5

Rozwijam jonową aplikację mobilną i muszę przekazać parametry do obietnicy $ timeout, aby móc wykonać pewne operacje przy tych parametrach. Czytałem dokument angularjs o $ timeout (https://docs.angularjs.org/api/ng/service/ $ timeout) i mówi on, że ostatnim parametrem mogą być parametry przekazywane do funkcji timeout. Próbowałem to:

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

ale to nie działa, nie mogę mieć Dostęp do zmiennej params wewnątrz funkcji timeout.

Czy robię coś nie tak? lub czy jest inny sposób na zrobienie tego?

Dzięki

Odpowiedz

8

Jest to nowy argument, który został introduced z angular 1.4.x. Możliwe więc, że próbujesz go użyć z angular 1.3 or lesser version.

Example

Twój przykład powinien po prostu pracować pod warunkiem, że używasz właściwej wersji kątowej.

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

Inną rzeczą jest, aby pamiętać, że nie przechodzą to jako argument do obietnicy limitu czasu, są tylko argumenty przekazywane do funkcji prowadzonej przez $timeout usługi. Jeśli chcesz przekazać argument jako wartość rozwiązaną przez obietnicę timeout, po prostu zwróć wartość.

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

Jeśli prawdziwym celem jest uzyskanie argument przekazany do funkcji z wersji < 1.4, a potem po prostu przenieść go do funkcji i wywołać ją:

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

i po prostu zadzwoń:

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

dobrze, widziałem, że jonowa wykorzystuje v 1.3.6, więc postanowiłem zrobić TE funkcję, dzięki – oware

+0

@oware Aah prawdopodobnie używasz wiązkę jonową, która pochodzi z 1.3. x – PSL

+0

tak, to był problem – oware

3

Parametr, którego próbujesz użyć, został wprowadzony w wersji 1.4 angulary, która jest obecnie uważana za niestabilną (najprawdopodobniej używasz wersji < = 1.3 - $timeout docs).

można spróbować:

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

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