2015-05-25 6 views
5

Sto sviluppando un'applicazione ionica mobile e ho bisogno di passare i parametri alla promessa $ timeout in modo da poter fare alcune operazioni con quei parametri. Ho letto il documento angularjs su $ timeout (https://docs.angularjs.org/api/ng/service/ timeout) e dice che l'ultimo parametro può essere passato alla funzione di timeout. Ho provato questo:

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

ma non funziona, non posso accedere alla variabile params all'interno della funzione di timeout.

Sto facendo qualcosa di sbagliato? o c'è un altro modo per farlo?

Grazie

risposta

8

Questo è un argomento nuovo che è stato introduced con angular 1.4.x. Quindi potrebbe essere possibile che tu stia cercando di usarlo con angular 1.3 or lesser version.

Example

Il vostro esempio dovrebbe funzionare a condizione che si sta utilizzando la versione giusta di angolare.

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

Un'altra cosa da notare è che non sta passando questo come argomento per la promessa di timeout, sono solo argomenti passati alla funzione gestito da $timeout servizio. Se si desidera passare l'argomento come valore risolto dalla promessa di timeout, è sufficiente restituire il valore.

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

Se la vera intenzione è quella di ottenere l'argomento passato alla funzione con la versione < 1.4, poi basta spostarlo in una funzione e invocarlo:

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

e basta chiamare:

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

bene, ho visto che ionico utilizza v 1.3.6, così ho deciso di fare te funzione, grazie – oware

+0

@oware aah probabilmente si sta utilizzando fascio ionico che viene fornito con 1.3. x – PSL

+0

sì, quello era il problema – oware

3

Il parametro che si sta tentando di utilizzare è stato introdotto nella versione 1.4 di angularjs che è attualmente considerata instabile (molto probabilmente si sta utilizzando la versione < = 1.3 - $timeout docs).

Si potrebbe provare:

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

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