在角度,如何使用取消用户事件的$间隔,如页面更改?

时间:2014-01-26 14:18:54

标签: angularjs

关于$interval

Angular documentation说:

  

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

但它没有解释如何破坏$ interval。

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

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

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

1 个答案:

答案 0 :(得分:80)

每当用户更改页面时,与路由控制器关联的范围(以下示例中为/page1)将发送a $destroy event。您可以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); });
}