2017-11-17 2 views
0

私はログインのために$ stateChangeStartを使っています。stateChangeStart - AngularJS

私のサイトには、彼がログに記録されていないときにユーザーが行くことができるページがあります。

私はこのコードをログアウトし、一部のページで確認アクセスするために書いています。

しかし、ユーザーが「doesnの場合、私はこれが他と$ stateChangeStart

ていることを行うことができますどのように任意のアイデア

$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) { 
      console.log('TS', toState, 'TP', toParams, 'FS', fromState, 'FP', fromParams) 
      if (!$rootScope.currentUser) { 
       console.log('NO USER') 
       if (toState.name !== 'login') { 
        event.preventDefault(); 
        console.log('SOME ROUTE'); 
        $state.go("login"); 
       } 
       else if (toState.name !== 'about') { 
        console.log("about no user") 
        $state.go("about"); 
       } 

      } 
     }); 

(ユーザー検証の必要がない)についてのページに行くとき、私は問題を抱えています仕事。

ありがとうございます!

答えて

1

のベストプラクティスは、ログインが必要な場合は、

.state("users", { 
    url: "/users", 
    data: { 
     requiresLogin: true 
    } 
}) 

は、あなたが状態は、各ナビゲーションにそのようなことを、ログインを必要とする場合にチェックすることができます(設定時)、各ルートに指定することです。

$rootScope.$on('$stateChangeStart', (event, toState, toParams, fromState, fromParams, options) => { 
    if(toState.data && toState.data.requiresLogin) { 
     // validate the user here, if not valid navigate to Login 
    } 
}); 

ボーナスとして、あなたはデータの継承を活用し、abstract状態でのログインが必要ですルートの範囲を指定することができます。上記の例で

e.state("users", { 
    abstract: true, 
    url: "/users", 
    data: { 
     requiresLogin: true 
    } 
}) 
.state("users.main", { 
    url: "/", 
    template: '<users-main></users-main>' 
}) 
.state("users.page2", { 
    url: "/page2", 
    template: '<users-page2></users-page2>' 
}) 

、ユーザの子状態で各状態(その名前でusers.接頭辞を有する)は、したがって、ログインが必要になり、データプロップを継承します。

関連する問題