将AngularJS与$ window.sessionStorage一起使用(使用Onsen UI)

时间:2016-04-13 10:58:48

标签: angularjs onsen-ui onsen-ui2

我正在尝试实现一个简单的登录功能。我想根据$ window.sessionStorage.currentUserId5会话是否存在,让DOM加载不同的元素。但是我添加到.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) {

    });  

1 个答案:

答案 0 :(得分: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的日志。通常可以在不需要外部帮助的情况下调试这些类型的问题。