4

我已经设置了一个控制器每隔几秒钟打勾,这反过来又对后端 api 进行了一次安静的调用。一切都按预期工作,除非我导航到另一个部分(由单独的控制器处理),滴答声继续触发。

是否可以完全从范围中删除控制器?

这是我当前控制器的粘贴:

myApp.controller('SupervisorController', function($scope, supervisord, $timeout) {

    $scope.supervisord = supervisord;

    (function tick() {
        $scope.supervisord.fetch();
        $timeout(tick, 2500);
    })();
});
4

2 回答 2

4

http://docs.angularjs.org/api/ng.$ro​​otScope.Scope它提到

就在作用域被销毁之前,会在该作用域上广播 $destroy 事件。应用程序代码可以注册一个 $destroy 事件处理程序,这将使它有机会执行任何必要的清理。

这似乎正是您想要的。

于 2013-03-31T12:38:38.280 回答
1

一种解决方法是使用var myInterval = setInterval(tick, 2500);它来启动它,然后再clearInterval(myInterval);停止它(或类似的$timeout.cancel(myInterval))。为此,您需要myInterval在两个控制器中访问,因此您可以考虑将其包装在Angular 服务中。

于 2013-03-31T12:26:37.193 回答