2

簡単なログイン機能を実装しようとしています。$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) {

    });  
4

1 に答える 1

0

失礼なことを言いたくないのですが、質問は温泉UIとはあまり関係がないと思います。あなたはそれを使用していますが、Onsen UI の使用によって実際の質問が変わるとは思えません。(Onsen UI が何らかの方法でコードを壊さない限り。)

あなたが使用しているように見えるのはngStorageモジュールです。私が見たところ、local および sessionStorage にアクセスする通常の方法は、$window ではなく直接アクセスすることです。

したがって$sessionStorage、それを直接要求して使用することができます。問題が何らかのブラウザのリロードに関連していると思われる場合は、何らかの形でセッションを中断するなどして、問題が解決するか$localStorageどうかを確認してください。あなたが試すことができる最後のことは、正常localStorageでありsessionStorage、あなたのために働くかどうかを確認することです.

そして、何が起こるかをデバッグしたい場合は、次のようなことができます

$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は、[OK] をクリックするまで実行が停止するため、より適切な場合があります。

preserve logもう 1 つのオプションは、ブラウザー インスペクターのコンソールでオプションをクリックすることです。Chrome コンソールを開くには、Ctrl + Shift + Jまたはを実行しますCmd + Opt + J。他のブラウザにも同様のコンソールがあり、 からのログを表示できますconsole.log。通常、これらのタイプの問題は、外部の助けを必要とせずにデバッグできます。

于 2016-04-14T06:15:35.867 に答える