2015-05-09 17 views
1

我試圖在登錄後得到一個標題更新。我在這項努力中使用了$on$watch無濟於事。當我刷新它工作正常。代碼如下。如何在angular/node.js應用程序中登錄後更新html頭文件?

header.html中(缺失爲簡單起見過量NAV條形碼)

<li><a ng-href="#/login" ng-hide="showMenu">Login</a></li> 
<li><a ng-href="#/signup" ng-hide="showMenu">Signup</a></li> 
<li><a href="javascript:" ng-click="logout()" ng-show="showMenu">Logout</a></li> 

app.js

$stateProvider 
    .state('app', { 
    url: '', 
    views: { 
     'header': { 
      templateUrl: 'views/partials/_header.html', 
      controller: 'HeaderCtrl' 
     } 
    } 
    }) 

header.js(廣播火災正確這表現在console.logs)

angular.module('urbinsight') 
.controller('HeaderCtrl', function ($scope, $rootScope, $state, $location, UserAuthFactory, AuthFactory) { 

$scope.logout = function() { 
    UserAuthFactory.logout(); 
    $rootScope.$broadcast('loginStateChange'); 
    $location.path('/'); 
}; 

$scope.showMenu = AuthFactory.loggedStatus(); 

$rootScope.$on('loginStateChange', function(){ 
    console.log($scope.showMenu) 
    $scope.showMenu = AuthFactory.loggedStatus(); 
    console.log($scope.showMenu) 
    }) 
}) 

authService

angular.module('urbinsight.services') 
.factory('AuthFactory', function ($window) { 
var isLogged = false; 

return { 
    check: function() { 
    if ($window.sessionStorage.token && $window.sessionStorage.user) { 
     isLogged = true; 
    } else { 
     isLogged = false; 
     delete this.user; 
    } 
    }, 
    loggedStatus: function() { 
    return isLogged; 
    }, 
    changeLoggedStatus: function() { 
    isLogged = !(isLogged); 
    } 
}; 
}) 

登錄功能+廣播

login.submit = function() { 
    var username = user.username, 
    password = user.password; 

    if (username !== undefined && password !== undefined) { 
    UserAuthFactory.login(username, password).success(function(data) { 

     $rootScope.showMenu = true 
     // AuthFactory.isLogged = true; 
     AuthFactory.changeLoggedStatus(); 
     AuthFactory.user = data.user.username; 
     AuthFactory.userRole = data.user.role; 

     $rootScope.$broadcast('loginStateChange'); 

     $window.sessionStorage.token = data.token; 
     $window.sessionStorage.user = data.user.username; 
     $window.sessionStorage.userRole = data.user.role; 
     $location.path('/'); 
    }).error(function(status) { 
     $window.alert('Oops something went wrong!'); 
    }); 
    } else { 
    $window.alert('Invalid credentials'); 
    } 
}; 

請告訴我,我做錯了。

+0

可以張貼的代碼部分,在那裏你播出「loginStateChange」成功登錄後? – shivas

+0

完成。我在底部添加了它,它是在登錄頁面上處理的登錄Ctrl中的一項功能。 – shkfnly

回答

1

您已在登錄控制器中設置「$ rootScope.showMenu = true」。但在你的頭控制器中,你也有「$ scope.showMenu = AuthFactory.loggedStatus();」

所以我會從你的頭控制器

$scope.showMenu = AuthFactory.loggedStatus(); 

既然你要刪除這條線你的頭的HTML到$ rootscope showMenu變量直接反應

+1

謝謝你。看起來它正在工作,但在渲染時不能正確更新。因爲我認爲操作的邏輯更好,所以我刪除了上述行。 – shkfnly