Подтвердить что ты не робот

Как остановить $interval при выходе из ui-состояния?

Angular, UI-маршрутизатор. Используя $interval в контроллере такого состояния:

$scope.Timer = null;

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

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

Проблема? Таймер сохраняется после выхода из состояния. Мое понимание заключалось в том, что $scope и контроллер по существу "уничтожаются", когда остается состояние. Итак, на основании этого таймер должен остановиться (внутри контроллера я отменяю таймер при перемещении, который работает, но он сохраняется, если я перехожу в состояние diff). Что я не понимаю здесь?

Я предполагаю, что с интервалом и таймаутом services в angular, они доступны повсюду, но я до сих пор не понимаю, как они видят функции в неинициализированном контроллере, если он не скопирован. Является ли мое решение просто использовать обычный добрый интервал js?

4b9b3361

Ответ 1

интервал очистки $destroy

Подобно этому

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