0

angular jsに2つのコントローラーがあります。

  • ナビゲーション バーを制御し、必要に応じてログアウト ボタンを表示するNavCtrl
  • 認証とローカル ストレージの設定を担当するAuthCtrl

私が直面している問題は、両方のコントローラーでトークンを設定し、同じものを取得する際にすべてが正常に機能することです。

しかし、認証するときは、ページがレンダリングされたときに値を取得するため、NavCtrl の変更を確認するためにページをリロードする必要があります。それに応じて変更をレンダリングするloginまたは要求がある場合、通知を NavCtrl に渡す方法はありますか?logout

.controller 'AuthCtrl',($scope,User)->
    $scope.login = ()->
        User.auth $scope.username,$scope.password
        return
    return

.controller 'NavCtrl',($scope,User,$window)->
    $scope.is_authenticated = $window.localStorage.getItem "authFlag"
    console.log $window.localStorage.getItem "token"
    console.log $window.localStorage.getItem "authFlag"
    $scope.logout = ()->
        User.logout()
        $scope.is_authenticated = $window.localStorage.getItem "authFlag"
    return

User私が定義したファクトリでありauthFlagbool認証ステータスを保存するものです。基本的に私はで行われた変更を聞きたいですauthFlag

また、可能であれば、これがベストプラクティスなのか、それとも私が何か間違ったことをしているのかについてコメントしてください.

4

1 に答える 1

0

この問題は、単純なブロードキャストを追加することで解決できます。認証が行われるユーザー ファクトリ内に、追加します。

$rootScope.$broadcast 'authEvt'

navCtrl使用してブロードキャストをキャッチします

$rootScope.$on "authEvt",()-> $scope.is_authenticated = $window.localStorage.getItem "authFlag" return

これにより、localStorage イベントの変更時に変数がリロードされます。

于 2016-11-04T06:43:43.630 に答える