4

私はサードパーティのクライアント側ログインを使用しており<ng-view>、すべてのルートに対して持っているため、すべてのナビゲートが 内でリロードされることを意味します<ng-view>

次に、すべてのパーシャルにユーザーのログイン情報を表示するグローバル フッターがあるので、下に置き<ng-view>ます。このようなものになります

<ng-view></ng-view>
<div ng-controller="FooterCtrl">User logged-in Info</div>

<ng-view>私の問題 ログインのみがリロードされ、フルリロードされないため、ログイン後に FooterCtrl にログインしたユーザー情報が表示されません。(F5 を使用してページを手動で更新しない限り)。

私の質問は、

  • ユーザーがログインしていないときに FooterCtrl を非表示にするにはどうすればよいですか
  • FooterCtrl はどこに配置すればよいですか?
4

1 に答える 1

0

FooterCtrlコントローラーで、ルートの変更に注意して ください。

ルートが変更されるたびに、ユーザーがログインしているかどうかに関する情報をフェッチします。

したがって、コードは次のようになります。コントローラーには、次のコードがあります。

$scope.$on('$routeChangeStart', function (next, current) {
    //Get the current state of the user log in.
    //Accordingly, set the variable

    //If user is logged in
    $scope.userIsLoggedIn = true;

    //Else
    $scope.userIsLoggedIn = false;
});

したがって、スコープは、ルートが変更されるたびにユーザーがログインしているかどうかを認識できるようになりました。これは、アプリケーションが正しく構成されていれば、異なるテンプレートが にロードされるたびに発生すると思いますng-view

これで、ビューは次のように単純になります。

<div ng-view>
</div>

<div ng-controller="FooterCtrl">
    <footer ng-show="userIsLoggedIn">
        <!-- Info to show when user is logged in -->
    </footer>

    <footer ng-hide="userIsLoggedIn">
        <!-- Info to show when user is NOT logged in -->
    </footer>
</div>

したがって、フッターには、ユーザーのログイン状態に基づいてデータが表示されます。ビュー テンプレートが変更されるたびに、コントローラーはログイン状態を判断し、それに応じてビューを表示します。

于 2013-06-05T11:14:04.537 に答える