javascript - 倒计时和重定向的正确方法

标签 javascript angularjs ngroute

我正在使用 ngRoute 模块来处理 angularJS 单页应用程序中的多个链接。有时用户会到达错误的链接,应该被重定向(因为内容是动态的,它取决于外部源,但它不相关)。

假设我想在 10 秒后重定向用户,同时我想显示警告并显示倒计时。我只是使用一个 seconds 变量开始形式 10 和一个函数 $interval 秒数直到 0,然后重定向

$scope.seconds = 10;
$scope.startCountdown = function () {
    var intervalPromise = $interval(function () {
        if ($scope.seconds > 0) {
            $scope.seconds--;
        }
        else {
            $interval.cancel(intervalPromise);
            $location.search({});
            $location.path("/");
        }
    }, 1000);
}
$scope.startCountdown();

它有效,但是当用户在倒计时结束前改变位置时(他可以从顶部菜单调用 $location.path("/Summary")),倒计时仍然在后台进行,之后几秒钟后,他被重定向到家。

我该如何解决这个问题?我可以使用 $scope.$on("$routeChangeSuccess", function (args) { ... } 事件来取消 promise ,但那样我需要保存 intervalPromise变量和...它似乎太有线了!有没有更好的方法以直接的方式实现这个倒计时逻辑?

最佳答案

为此首先使用$timeout 而不是$interval

为什么存储 promise 似乎太有线了?当然,您需要将它存储在某个地方以便稍后调用它:我会这样做:

var promise = $timeout(function(){
    // your code
    promise = null; 
    //perform redirect
}, 10000);
$scope.$on("$routeChangeSuccess", function (args) {
    if(promise != null){
       $timeout.cancel(promise);
     } 
};

关于javascript - 倒计时和重定向的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36857643/

相关文章:

javascript - 防止在PHP中缓存500个内部错误页面的问题

javascript - 固定表格单元格的高度

javascript - 在 AngularJS 中,当 localStorage 已满时,如何捕获 ngStorage 的错误?

javascript - Angular JS <a href> 路由回登录

javascript - 固定 header 脚本函数 floatHead 正在添加一个额外的 thead

javascript - reactjs Hook 中连续状态对象设置的问题

javascript - ui-router 版本 0.2.* 已从 npm 中删除

javascript - 将数据保存在数据库问题中,在控制台上收到 NULL

javascript - Angular 应用程序中的超链接需要 #!而不仅仅是#

javascript - 加载失败 - 跨源请求是 - Angularjs 1.x - ngRoute