【发布时间】:2017-03-23 09:34:43
【问题描述】:
我有一个非常奇怪的问题。我有一个像下面这样的 if 语句:
$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);
}
});
LoginServer.getUserLoggedIn 和 setUserLoggedIn 是这样的:
this.setUserLoggedIn = function(value){
sessionStorage.userIsLoggedIn = value;
};
this.getUserLoggedIn = function() {
return sessionStorage.userIsLoggedIn;
};
问题很简单。 If 语句永远不会被调用,即使 next.requireLogin 为 true 并且 LoginService.getUserLoggedIn() 为 false。控制台输出如下:
true false
false
显然“next.requireLogin && !LoginService.getUserLoggedIn()”的计算结果为 false,但两者都是正确的值?如果有帮助,在 Chrome 控制台中,最后一行“false”会以紫色突出显示。
有谁知道怎么回事?
【问题讨论】:
标签: javascript angularjs if-statement session-storage