tiempo interval funcion ejecutar cierto cada angularjs angularjs-scope

angularjs - interval - ejecutar funcion cada cierto tiempo angular



La función de intervalo AngularJS $ continúa después del cambio de ruta (3)

Tengo una función dentro de un controlador que se basa en setInterval. Noté que después de la primera llamada, funcionó bien, pero continuó incluso después de que cambió la ruta. Luego intenté usar el servicio nativo de intervalos que rastrearía automáticamente los cambios en el alcance. Sin embargo, el problema sigue siendo. Así que ahora tengo dos preguntas. El primero es ¿qué puedo hacer para que use una función repetida dentro de un controlador específico que se detiene cuando el usuario deja esa ruta? Además, ¿por qué la función de alcance continúa ya que he cambiado los ámbitos?

ACTUALIZACIÓN - El código es como este

$scope.refreshScore() { .... } $scope.refreshMe = function(){ $interval($scope.refreshScore, 10000); }


Para una solución simple, solo puede usar $location.$$path antes de disparar el evento asociado con el intervalo.

Si la ruta no se correlaciona con la interfaz de usuario, no la dispare y cancele.


Prueba esto:

$scope.refreshScore = function() { // your logic here } var promise = $interval($scope.refreshScore, 10000); $scope.$on(''$destroy'',function(){ if(promise) $interval.cancel(promise); });

Destruirá el intervalo cuando cambies la ruta.


Tal vez intente cancelarlo en el evento de destrucción del alcance.

$scope.refreshScore() { .... } var intervalPromise; $scope.refreshMe = function(){ intervalPromise = $interval($scope.refreshScore, 10000); } $scope.$on(''$destroy'',function(){ if(intervalPromise) $interval.cancel(promiseFromInterval); });

$interval no sea la mejor solución para esto, especialmente si se trata de una operación asíncrona. Si es absolutamente necesario tener alguna operación cronometrada que quiera que ocurra cada x ms, usaría algo como esto:

var refreshingPromise; var isRefreshing = false; $scope.startRefreshing = function(){ if(isRefreshing) return; isRefreshing = true; (function refreshEvery(){ //Do refresh //If async in then in callback do... refreshingPromise = $timeout(refreshEvery,10000) }()); }

Entonces haz lo mismo que arriba

Si tiene problemas para cancelar la actualización, puede intentar suscribirse a algún tipo de evento de cambio de ruta. Y haciéndolo allí.