旧AngularJS控制器无法卸载

时间:2017-07-22 14:47:11

标签: angularjs controller angular-ui-router

即使在使用ui-router的$state.go函数与另一个控制器进入不同的状态之后,我仍然遇到旧控制器似乎保持活动状态的问题。

我通过为每个控制器添加一个间隔来测试它,并将其名称记录到控制台。多次更改状态后,所有先前访问过的控制器都保持活动状态:

$interval(function () {
   console.info("ACCOUNT")
}, 1000)

Console Log

1 个答案:

答案 0 :(得分:1)

根据官方文档available here,当控制器的范围被销毁时,使用$interval创建的间隔不会自动销毁。

  

注意:必须明确销毁此服务创建的间隔   当你完成它们。特别是他们不是   当控制器的范围或指令时自动销毁   元素被破坏了。你应该考虑到这一点   确保在适当的时刻始终取消间隔。

最好听一下示波器的$destroy事件并销毁在控制器中创建的所有间隔。

这是一个很好的方法。

var intervalRef;

$scope.someFunction = function () {
   // Save a reference to the interval's promise so that it can be canceled later
   intervalRef = $interval(function () {
                   console.info("ACCOUNT")
                 }, 1000);
}

$scope.$on("$destroy", function () {
    // When the scope of the controller is destroyed, cancel the interval
    if (intervalRef) {
        $interval.cancel(intervalRef);  
    } 
});