jyt*_*234 0 javascript if-statement session-storage angularjs
我有一个非常奇怪的问题.我有一个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);
}
});
Run Code Online (Sandbox Code Playgroud)
LoginServer.getUserLoggedIn和setUserLoggedIn是这样的:
this.setUserLoggedIn = function(value){
sessionStorage.userIsLoggedIn = value;
};
this.getUserLoggedIn = function() {
return sessionStorage.userIsLoggedIn;
};
Run Code Online (Sandbox Code Playgroud)
问题很简单.永远不会调用If语句,即使next.requireLogin为true且LoginService.getUserLoggedIn()为false.控制台中的输出如下:
true false
false
Run Code Online (Sandbox Code Playgroud)
显然"next.requireLogin &&!LoginService.getUserLoggedIn()"的计算结果为false,但两者都是正确的值?如果有帮助,在Chrome控制台中,带有"false"的最后一行会突出显示为紫色.
有谁知道什么是错的?
sessionStorage存储字符串,而不是布尔值.所以getUserLoggedIn返回字符串"true"或"false",并且所有非空字符串都是真实的.
更改getUserLoggedIn为返回布尔值.
this.getUserLoggedIn = function() {
return sessionStorage.userIsLoggedIn == 'true';
};
Run Code Online (Sandbox Code Playgroud)
如果你习惯了,console.log(next.requireLogin, LoginService.getUserLoggedIn())你会看到第二个值附近的报价,也许你已经意识到了这个问题.连接时,会丢失类型信息.
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |