我遇到了一个简单的登录/注销页面的问题。当用户登录/注销时,会显示带倒计时的成功消息。当timout到期时,路线会改变。
但是,用户可以在倒计时结束前(使用菜单或按钮)导航。问题是即使使用菜单,登录/超时仍会触发。
这里是柜台的代码:
$scope.onTimeout = function(){
$scope.counter--;
$scope.timeoutCountdown = $timeout($scope.onTimeout,1000);
if($scope.counter === -1){
$scope.safeApply(function() { $location.path("/home"); }); //if the user isn't logged...redirect to main
}
};
这是按下按钮时更改位置的代码:
$scope.redirectToHome = function() {
$scope.safeApply(function() { $location.path("/portale"); });
};
有人知道更改控制器后超时发生的原因吗?
提前致谢
答案 0 :(得分:2)
您遇到的问题是由于$ scope被销毁时超时未被清除。
您需要通过收听$destroy
事件手动清除超时。此事件源自Angular,每当$ scope被销毁时都会抛出此事件。尝试将以下内容添加到控制器中(我没有对此进行测试,因此请考虑此伪代码)
$scope.$watch('$destroy', function(){
$timeout.cancel($scope.timeoutCountdown);
});
编辑:
您也可以在更改路线之前执行此操作:
$scope.redirectToHome = function() {
$timeout.cancel($scope.timeoutCountdown);
$scope.safeApply(function() { $location.path("/portale"); });
};
请记住,如果您有其他重定向可能性(即用户可以用来从登录/输出页面导航的其他按钮),您需要为每个按钮执行此操作(或者最好将其包装在其中)方法)。