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

В angular, как использовать отменить $interval на пользовательских событиях, например изменение страницы?

Angular документация о $interval говорит:

Примечание. Интервалы, созданные этой службой, должны быть явно уничтожены, когда вы закончите с ними.

но это не объясняет, как уничтожить интервал $.

Если, например, у меня есть директива, содержащая этот код:

$interval(function() {
    for (var i in myArray) {
        // do domething
    }
}, 5000);

Как я могу уничтожить его, когда пользователь меняет страницу, например?

4b9b3361

Ответ 1

Всякий раз, когда пользователь меняет страницу, область, связанная с контроллером маршрута (/page1 в примере ниже), будет отправлена ​​a $destroy событие, Вы можете cancel добавить $interval в прослушиватель к этому событию:

app.config(function ($routeProvider) {
     $routeProvider.when('/page1', {
          template: '<div>Page Content</div>',
          controller: PageController
      });
     // ...
});

function PageController($scope, $interval) {
    var intervalPromise = $interval(function () { /* ... */ }, 5000);      
    $scope.$on('$destroy', function () { $interval.cancel(intervalPromise); });
}