我正在使用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
。
答案 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);
}
});
});
只要在范围被销毁时就可以调用它。