2017-01-03 3 views
0

私はイオン性のアプリケーションでかなりの時間をかけて苦労してきました。私は複数のコントローラ、複数のhtmlページを持っています。コルドバ・イオニック・ログアウトとリフレッシュ・コントローラ

は私が最初のページに戻りたい(私はsidemenuのコントローラーを使用)ログオフするたびに。私が最初のページにいるときはいつでも、別のユーザーにログインしたいと思っています。ターゲットビュー(menu.landingMenu)のUI-routerでcache:falseを有効にすると、ログアウト後にそのページに移動することはありません。

これはログアウトのコードです。

$scope.logOff = function() { 

    appData.clear(); 
    $http.get(appData.hostURL + '/api/Account/logoff.aspx'); 
    $scope.$destroy(); 
    $localStorage.$reset(); 
    CredentialService.del(); 
    $state.go('login', { action: 'logoff' }); 
    $timeout(function() { 
     $ionicHistory.clearCache(); 
     $ionicHistory.clearHistory(); 
    }, 1500) 

} 

この

は私がログアウトするたびに、すべてのloginController

// Check if a state change happened 
    $scope.$on('$stateChangeSuccess', 
     function onStateSuccess(event, toState, toParams, fromState) { 
      console.log(fromState); 
      console.log('This is the Fromstrate'), fromState; 
      console.log(toParams); 
      if (toState.name == "login") { 
       if (toParams.action == "logoff") { 
        // keep startup url (in case your app is an SPA with html5 url routing) 
        var initialHref = window.location.href; 

        function restartApplication() { 


         // Show splash screen (useful if your app takes time to load 
         // Reload original app url (ie your index.html file) 

         console.log("THis is a reload") 
         document.location.href = 'index.html'; 
        } 

        restartApplication(); 
       } else { 
        var storedCreds = CredentialService.get() 

       } 
      } 
     } 
    ); 

まず、内のイベントである、と私は、ログインページに送信ボタンを押して、その「リフレッシュ」ページ、それを間もなくblincksが反応しません。私はそれをもう一度クリックするたびに

は、それが次のページに行くが、文句を言わないので、何のデータをレンダリングしない、コントローラをリロードします。

答えて

3

コードには、改良やリファクタリングがいくつかあります。

  • ページを更新したくない場合は、常に状態、キャッシュなどを消去する方法を見つけてください。アプリをリセットするためにwindow.locationを使用して表示を切り替えることは避けてください。 状態をリセットする必要があるクリーン関数を使用してください:
    localStorage.clear(); CredentialService.del();それは関数を実行し、キャッシュを回避しようとしている間、手動で範囲をdestroyig など
  • 避け:偽それは自動的に行われます。
  • logOff関数の内部ではなく、ログインビューまたはインデックスビューを入力するときにionicHistoryとキャッシュをクリアします。
  • 必要な場合は、機能を実行するために、イオンのイベントを使用しますなど$ ionicView.beforeEnter、$ ionicView.beforeLeave、可能な場合は順序に従うようにhttp://ionicframework.com/docs/api/directive/ionView/
  • チェーンの約束を。

あなたの$ scope.logOffはのようになります:

$scope.logOff = logOff; 
function logOff() { 
    $http.get(appData.hostURL + '/api/Account/logoff.aspx') 
     .then(clearDataAndLeave); 
     .catch(someErrorFunction) 
} 
function clearDataAndLeave(){ 
    appData.clear(); 
    $localStorage.$reset(); 
    CredentialService.del(); 
    //other cleaning actions 
    $state.go('login');  
} 

そして、あなたは/インデックスコントローラログイン中:

$scope.$on("$ionicView.beforeEnter", activate); 
function activate(event, data){ 
    $ionicHistory.clearCache(); 
    $ionicHistory.clearHistory(); 
    //Then you can handle the credentials, asking if they were deleted or something like that 
    var storedCreds = CredentialService.get(); 
    if (storedCreds){ 
     //login or sthg else 
    } 
}); 
+0

にIを再度ログインするたびに、私が持っている最大の問題は、コントローラはmenu.landingMenuから "再起動"しませんが役立ちますか?病気は2日でこれを試して、報告する。ありがとうございました ! –

関連する問題