【问题标题】:AngularJs stop $interval for specific controllerAngularJs 停止特定控制器的 $interval
【发布时间】:2016-05-13 18:35:08
【问题描述】:

我使用 $interval 在第一个控制器中运行某些功能。重定向到第二个控制器后,$interval 注册函数(在第一个控制器中实现)仍在运行。我想停止 $interval 服务而不使用破坏功能。

【问题讨论】:

    标签: javascript angularjs events setinterval


    【解决方案1】:

    Note: 此服务创建的间隔必须显式销毁 当你完成与他们。特别是它们不是 当控制器的作用域或指令的作用域自动销毁 元素被破坏。您应该考虑到这一点并 确保始终在适当的时候取消间隔。看 下面的示例了解有关如何以及何时执行此操作的更多详细信息。

    您可以使用cancel 方法清理$interval 对象。您应该在离开控制器时取消interval

    为此,您需要在$scope$destroy 事件上添加eventListener,您可以进行清理工作(例如,取消间隔对象、取消超时对象)。

    代码

    var myInterval = $interval(function(){
       //your interval code
    }, 1000)
    
    //register this listener inside your controller where the interval belongs.
    $scope.$on('$destroy', function(){
        $interval.cancel(myInterval)
    });
    

    Sample Plunkr

    【讨论】:

    • 我想在哪里使用 ClearInterval?是在第二个控制器还是第一个控制器中?
    • 在这种情况下,你应该在同一个控制器中使用上面的代码
    【解决方案2】:

    在 rootScope 中添加区间变量。并在第二个控制器打开时取消它,如下所示。

    第一控制器

    $rootScope.stopInterval = $interval(function(){
       //code goes here
    }, 1000);
    

    第二控制器

    $interval.cancel($rootScope.stopInterval);
    

    注意:在这种情况下,唯一的缺陷是您需要在第一个控制器之后使用的所有控制器中停止它,但是一个可靠的控制器。

    【讨论】:

    • 为此使用 $rootScope 是不好的代码风格。 Angular 方式是使用自定义服务。
    猜你喜欢
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 2013-09-13
    • 2014-10-05
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多