2015-06-19 10 views
13

Angolare, router UI. Utilizzando $ intervallo in un controller di uno stato in questo modo:

$scope.Timer = null; 

$scope.startTimer = function() { 
    $scope.Timer = $interval($scope.Foo, 30000); 
}; 

$scope.stopTimer = function() { 
    if (angular.isDefined($scope.Timer)) { 
     $interval.cancel($scope.Timer); 
    } 
}; 

Il problema? Il timer persiste dopo aver lasciato lo stato. La mia comprensione era che il $ scope e il controller sono essenzialmente "distrutti" quando viene lasciato uno stato. Quindi, in base a ciò, il timer dovrebbe fermarsi (All'interno del controller, sto cancellando il timer quando si muove, funziona - ma persiste se si naviga verso uno stato diff). Che cosa sto fraintendendo qui?

Immagino che poiché intervallo e timeout sono services in angolare, sono disponibili ovunque, ma non riesco ancora a capire come vedono le funzioni nel controller non inizializzato, a meno che non venga copiato. La mia soluzione è di usare solo intervalli regolari js buoni e vecchi?

+1

Un timer vaniglia sarebbe anche persistere, a meno che non cancellarlo. – Boaz

risposta

24

chiara intervallo sul $destroy

Ti piace questa

$scope.$on("$destroy",function(){ 
    if (angular.isDefined($scope.Timer)) { 
     $interval.cancel($scope.Timer); 
    } 
}); 
+1

Modifica: problema risolto, grazie mille! Correggi l'ortografia su "destroy" qui sopra - Non posso cambiarla a causa della lunghezza minima di 6 caratteri. – VSO

+0

i miei errori: P sei il benvenuto e grazie per la correzione :) –

+0

Perché devi controllare 'if (angular.isDefined ($ scope.Timer))'? – BornToCode

Problemi correlati