错误:$ rootScope:infdig在AngularJS中$ locationChangeStart上的无限$ digest循环

时间:2016-06-05 05:38:27

标签: angularjs

如果用户未登录,我正在尝试创建会话重定向。代码正如我预期的那样工作。但是,当我在控制台上查看时,会发生错误(如标题中所示)。我似乎无法解决这个问题,我需要一些帮助。

var domainName = window.location.href;
var domainName = domainName.split("/");
var domainName = domainName[0] + "//" + domainName[2];

var app = angular.module("app", []);

app.run(run);

run.$inject = ["$window", "$rootScope", "$cookies"];

function run($window, $rootScope, $cookies){

    // Runs everytime the URL changes
    $rootScope.$on('$locationChangeStart', function(event, current, previous) {
        // If the user is not logged-in and is not trying to access the register or log-in, It will go back to the log-in page
        // if(!$cookies.get('user') && current != domainName+"/#/"){
        if(current != domainName+"/#/"){
            $window.location.href = domainName+"/#/";
        //  Create a scope that will remind the users regarding the session
        //  $rootScope.sessionError = "Please Enter Exam Code before taking the exam";
        }
    });
}

1 个答案:

答案 0 :(得分:1)

如错误消息所述,您将面临无限循环。
当事件$locationChangeStart被触发时,您检查该网址并重定向到另一个网页。当您重定向时,网址会再次更改,再次触发$locationChangeStart,依此类推。
您需要找到另一种方法来验证用户是否已登录。

我不知道它是否会起作用,但请尝试检查current是否与previous不同。

$rootScope.$on('$locationChangeStart', function(event, current, previous) {
    if(current !== previous && current != domainName+"/#/"){
        $window.location.href = domainName+"/#/";
    }
});

我建议您使用$ location更改网址。
Docs
Related post