一尘不染

在角度,如何在用户事件(如页面更改)上使用cancel $ interval?

angularjs

Angular文档关于$interval说:

注意:完成此服务后,必须显式销毁此服务创建的间隔。

但这并没有说明如何破坏$ interval。

例如,如果我有一个包含以下代码的指令:

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

例如,当用户更改页面时,如何销毁它?


阅读 258

收藏
2020-07-04

共1个答案

一尘不染

每当用户更改页面时,与路由控制器关联的范围(/page1在下面的示例中)将被发送一个$destroyevent。你可以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); });
}
2020-07-04