不要忘记监听$destroy事件来清除timer

angularjs会广播一个$destroy的事件在销毁scope和其父对象被删除时。

在做一些清除的任务或资源的时候,监听这个事件就变得非常的关键,否则就可能消耗内存和CUP.

下面是一个有问题的情况:

module.controller("TestController", function($scope, $timeout) {
 
    var onTimeout = function() {
        $scope.value += 1;
        $timeout(onTimeout, 1000);
    };
    $timeout(onTimeout, 1000);
    $scope.value = 0;
            
});

下面是正确的情况:

module.controller("TestController", function($scope, $timeout) {
     
    var onTimeout = function() {
        $scope.value += 1;
        timer = $timeout(onTimeout, 1000);
    };
    var timer = $timeout(onTimeout, 1000);
     
    $scope.value = 0;
 
    $scope.$on("$destroy", function() {
        if (timer) {
            $timeout.cancel(timer);
        }
    });
});


关注微信公众号:前端开发知识

不要忘记监听$destroy事件来清除timer_第1张图片

你可能感兴趣的:(angularjs)