Ich habe ein wirklich seltsames Problem. Ich habe eine if-Anweisung wie die so unter:Javascript boolesche Operation funktioniert nicht
$rootScope.changeView = function(view){
$location.path(view); // path not hash
};
$rootScope.$on('$routeChangeStart', function (event, next) {
console.log(next.requireLogin + " " + LoginService.getUserLoggedIn());
console.log(next.requireLogin && !LoginService.getUserLoggedIn());
if(next.requireLogin && !LoginService.getUserLoggedIn()) {
console.log("No access to panel: not logged in.");
alert("You need to be logged in as an administrator to see this page!");
event.preventDefault();
$timeout(function() {
$rootScope.changeView("/");
}, 500);
}
});
Wo LoginServer.getUserLoggedIn und setUserLoggedIn sind dies:
this.setUserLoggedIn = function(value){
sessionStorage.userIsLoggedIn = value;
};
this.getUserLoggedIn = function() {
return sessionStorage.userIsLoggedIn;
};
Das Problem ist einfach. Die If-Anweisung wird nie aufgerufen, auch wenn next.requireLogin wahr ist und LoginService.getUserLoggedIn() false ist. Die Ausgabe in der Konsole ist wie folgt:
true false
false
So scheinbar "! Next.requireLogin & & LoginService.getUserLoggedIn()" falsch ergibt, doch beide sind die richtigen Werte? Wenn es hilft, wird in der Chrome-Konsole die letzte Zeile mit "false" violett hervorgehoben.
Weiß jemand, was los ist?