2016-06-05 13 views
1

Ich versuche eine Sitzungsumleitung zu erstellen, wenn der Benutzer nicht angemeldet ist. Der Code funktioniert wie erwartet. Wenn ich jedoch auf die Konsole schaue, tritt ein Fehler auf (wie im Titel angegeben). Ich kann das anscheinend nicht beheben und brauche Hilfe.

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"; 
     } 
    }); 
} 

Antwort

1

Wie die Fehlermeldung beschreibt, stehen Sie vor einer Endlosschleife.
Wenn das Ereignis $locationChangeStart ausgelöst wird, überprüfen Sie die URL und umleiten auf eine andere Seite. Wenn Sie die URL umleiten wird erneut geändert, feuern die $locationChangeStart wieder und so weiter.
Sie müssen einen anderen Weg finden, um zu überprüfen, ob der Benutzer angemeldet ist oder nicht.

Ich weiß nicht, ob es funktioniert, aber versuchen Sie zu überprüfen, ob current sich von previous unterscheidet.

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

Ich schlage vor, Sie $ Lage zu verwenden, um die URL zu ändern.
Docs
Related post

+0

die Bedingung nicht mehr auslöst, kann ich wissen, warum Sie $ Lage über $ Fenster vorgeschlagen? –

+0

Ich denke, es ist die eckige Art, so etwas zu tun, und "$ location" bietet einige nützliche Methoden. Das '$ window' ist nur ein Verweis auf ein window-Objekt, aber natürlich können Sie' $ window' ohne Probleme verwenden. Ich denke, es ist mehr wie eine Konvention. –

+0

Oh ok, vielen Dank –

Verwandte Themen