javascript - 点击后退按钮后停止 Angular $timeout 计时器

标签 javascript angularjs timer settimeout back

在我的 Angular 应用程序中,我有页面 1 和页面 2。

第 1 页基本上是主页,带有链接到第 2 页的按钮。

Page 1 有一个名为 Page1App 的 Angular 应用程序和一个名为 Page1Ctrl 的 Controller 。 Page 2 有一个名为 Page2App 的 Angular 应用程序和一个名为 Page2Ctrl 的 Controller 。

Page1AppPage2App 作为依赖项。

angular.module('Page1App', ['Page2App']);

在第 2 页中,有一个计时器,其工作原理类似于 this JSFiddle 中的计时器。 (代码重复如下)

 $scope.nextPic = function() {
      $timeout.cancel(picTimeout)
      if (++$scope.picIndex >= $scope.pics.length) $scope.picIndex=0
      picTimeout = $timeout($scope.nextPic, 2000)
  }

  $scope.prevPic = function() {
      $timeout.cancel(picTimeout)
      if (--$scope.picIndex < 0 ) $scope.picIndex=$scope.pics.length-1
      picTimeout = $timeout($scope.nextPic, 2000)
  }
  picTimeout = $timeout($scope.nextPic, 2000)

问题是,当我从第 2 页返回到第 1 页时,计时器继续在后台运行,并且偶尔会发出警报 弹出 - 如果您在第 2 页,则可以,但如果您已经离开第 2 页,则不行。

如何让第 2 页中的所有内容在用户离开时停止?

最佳答案

您可以监听作用域销毁事件监听器并清除超时。

例如:

$scope.$on('$destroy', function() {
    $timeout.cancel(picTimeout);
});

检查DOC对于作用域的 $destroy 事件。

关于javascript - 点击后退按钮后停止 Angular $timeout 计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30961750/

相关文章:

java - 如何停止在 java.util.Timer 类中安排的任务

javascript - 如何在使用 javascript 加载文档时执行 css3 转换?

angularjs - 将记录添加到 Firebase 数据库时发送电子邮件

angularjs - $index问题的 Angular 跟踪

PowerShell 计时器/秒表准确性

Python:每 x 分钟交替一次函数

javascript - 如何从请求返回响应(post | get)?

javascript - NPM 知道脚本是否作为前/后脚本运行

javascript - 使用带有 $GetJson 函数的传单搜索插件

angularjs - AngularDart Batarang 替代品