页面点击到其他路径

时间:2015-08-04 06:06:41

标签: javascript angularjs

我正在使用yo:angular-fullstack生成器来构建我的网站。当用户注册到该站点时,它将发送带有链接的激活电子邮件。当用户单击该链接时,它将显示激活成功和超时以转到主页。但是,当超时尚未完成且用户单击页面中的任何其他链接时,它会跳转到其他页面并继续运行超时。几秒钟后,用户仍将移至主页。

$scope.countdown = 10;
$scope.onTimeout = function() {
  $scope.countdown--;
  timer = $timeout($scope.onTimeout, 1000);

  if ($scope.countdown === 0) {
    $timeout.cancel(timer);
    $location.path('/');
  }
};
var timer = $timeout($scope.onTimeout, 1000);

当用户点击此页面中的其他链接时,我不知道如何取消timer

2 个答案:

答案 0 :(得分:4)

您需要使用$locationChangeStart事件收听AngularJS更改路线:

$scope.$on('$locationChangeStart', function () {
    $timeout.cancel(timer);
});

这样,当路线改变时,计时器被取消,用户不会被重定向。

答案 1 :(得分:2)

module.controller("TestController", function($scope, $timeout) {

    var onTimeout = function() {
        // something
    };
    var timer = $timeout(onTimeout, 1000);

    $scope.$on("$destroy", function() {
        if (timer) {
            $timeout.cancel(timer);
        }
    });
});

只要在范围被销毁时就可以调用它。