1

用户成功登录后,我正在尝试显示导航栏。但是即使用户登录后导航栏仍然隐藏。这是 index.html 的一部分

    <header id="Header1" data-ng-controller="navigationController">
        <!-- Navigation bar -->


        <nav class="navbar navbar-inverse" id="nav1" ng-hide="isConnected">
            <div class="collapse navbar-collapse">


                <ul id="Ul1" class="nav navbar-nav" style="color: white; font-weight: bolder; font-family: Arial; border-radius: 5px;">

                    <!-- <li class="nav navbar-brand" id="Li1" style="padding: 0px 0px 0px 0px;">
                    <img src="favicon.ico" height="20" width="20" />
                </li>-->


                    <li id="Li2" data-ng-class="{'active':isActive('/home')}">
                        <a data-original-title="Home page." class="disable-click" href="#/home">Home</a>
                    </li>

                    <li data-ng-class="{'active':isActive('/demo')}">
                        <a data-original-title="Demonstration page." class="disable-click" href="#/demo">Demonstration</a>
                    </li>

                </ul>
            </div> 
        </nav>
    </header>

控制器 navigationController.js 是

'use strict';
 app.controller('navigationController',
function ($scope, $location, $rootScope, AuthenticationService) {
    debugger;
    $scope.isActive = function (path) {
        return $location.path().substr(0, path.length) == path;
    };

        $scope.isConnected = !($rootScope.globals.currentUser);

    console.log($scope.isConnected);
});

我将当前用户存储在此服务中

 service.SetCredentials = function (username, password) {
        var authdata = Base64.encode(username + ':' + password);

        $rootScope.globals = {
            currentUser: {
                username: username,
                authdata: authdata
            }
        };

        $http.defaults.headers.common['Authorization'] = 'Basic ' + authdata; 
        $cookieStore.put('globals', $rootScope.globals);
    };

登录后绑定不起作用,除非我刷新菜单时显示(当 cookie 已满时)。请有任何解决方案

4

2 回答 2

2

您的 isConnected 属性仅在实例化控制器时评估一次。当用户登录时,无需重新评估 isConnected

您可以设置这样的手表来重新评估:

'use strict';
app.controller('navigationController',
function ($scope, $location, $rootScope, AuthenticationService) {
    debugger;
    $scope.isActive = function (path) {
        return $location.path().substr(0, path.length) == path;
    };

    $rootScope.$watch('globals', function(newVal, oldVal) {
            $scope.isConnected = !($rootScope.globals.currentUser);
    }, true);
});

请注意,您可能可以将手表直接添加到 $scope 而不是 $rootScope 因为 globals 属性应该在原型上继承,尽管我没有测试过这个来验证

于 2015-05-12T13:17:41.320 回答
1

尝试这个

'use strict';
 app.controller('navigationController',
function ($scope, $location, $rootScope, AuthenticationService) {
    ...

    $scope.isConnected = function() {
        return !($rootScope.globals.currentUser);
    };
});

并且不要将 ng-hide 值更改为ng-hide="isConnected()",保持为ng-hide="isConnected"

<nav class="navbar navbar-inverse" id="nav1" ng-hide="isConnected">
    ...
于 2015-05-12T13:30:57.963 回答