4

我正在使用 3rd-party 客户端登录,然后我有<ng-view>每条路线,所以这意味着所有导航都将重新加载在<ng-view>.

然后我有一个全局页脚,显示每个部分的用户登录信息所以我把它放在<ng-view>. 会是这样的

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

我的问题 FooterCtrl 登录后不会显示登录用户信息,因为登录只重新加载<ng-view>而不是完全重新加载。(除非我使用 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 回答