2

我正在尝试实现一个简单的登录功能。我想让 DOM 根据 $window.sessionStorage.currentUserId5 会话是否存在来加载不同的元素。但是我添加到 .run() 的条件语句只是继续使用 else{} 语句

<script>
   var app =  ons.bootstrap('app',  ['onsen','angular-svg-round-progress','nvd3','ngStorage']).run(function($rootScope,$window){ 

        if($window.sessionStorage.currentUserId5)
        {
           $("#menudiv").html('<ons-sliding-menu var="menu" id="menusliding" main-page="main.html" menu-page="menux.html" max-slide-distance="85%" type="reveal" side="left"  ></ons-sliding-menu>');
        }
        else{

           $("#menudiv").html('<ons-sliding-menu var="menu" id="menusliding" main-page="login.html" menu-page="menux.html" max-slide-distance="85%" type="reveal" side="left"  ></ons-sliding-menu>');               
        }           

       });
</script>  


<div id="menudiv"></div>

控制器

用户单击按钮并调用此按钮,应在此处创建 $window.sessionStorage

    $http.post('http://xxx-xxx.us-east-1.elasticbeanstalk.com/apipost/checkuserlogin', parameter, config).success(function (data, status, headers, config) {

            // if login, user session created, redirected to index.html
            if(data['result'] == 'success'){

                $window.sessionStorage.currentUserId5 = '5'
                $window.location.reload();

            }
            else {
                // else error pop up 
                ons.notification.alert({
                  message: 'Please try again'
                });   
            }
        })
        .error(function (data, status, header, config) {

    });  
4

1 回答 1

0

我不想粗鲁,但我认为这个问题与 Onsen UI 并没有真正的关系。即使您正在使用它,我也怀疑 Onsen UI 的使用会改变您的实际问题。(除非 Onsen UI 以某种方式破坏了代码。)

您似乎正在使用的是ngStorage模块。从我所见,访问本地和 sessionStorage 的正常方法似乎只是直接拥有它们,而不是通过 $window。

因此,您可以尝试直接要求$sessionStorage并使用它。如果您认为问题可能与某些浏览器重新加载以某种方式中断会话等有关,您可以尝试$localStorage看看它是否有效。您可以尝试的最后一件事就是看看是否正常localStoragesessionStorage为您工作。

如果你想调试发生了什么,那么你可以做类似的事情

$http.post('...', parameter, config).success(function (data, status, headers, config) {
    alert(data.result);

    if(data['result'] == 'success'){
        $window.sessionStorage.currentUserId5 = '5'
        alert($window.sessionStorage.currentUserId5);
        $window.location.reload();
    }
    else {
        ...
    }
}

通常最好使用console.log代替alert,但在这种情况下alert可能会更好,因为它会停止执行,直到您单击确定。

另一个选项是单击preserve log浏览器检查器控制台中的选项。要打开 chrome 控制台,您可以执行Ctrl + Shift + JCmd + Opt + J。其他浏览器也有类似的控制台,您可以在其中查看来自console.log. 通常这些类型的问题可以在不需要外部帮助的情况下进行调试。

于 2016-04-14T06:15:35.867 回答