Angular Logout不会清除本地存储

时间:2016-10-16 16:34:45

标签: javascript angularjs node.js express

所以这是我在ng-click上的注销:(我的观点)

<div class="navbar navbar-default"><div class="container">
<div id="navbar-main">
  <ul class="nav navbar-nav">
    <li><a href="/">Home</a></li>
    <li ng-show="navvm.isLoggedIn" ng-hide="navvm.logout"><a href="profile">{{ navvm.currentUser.name }}</a></li>
  </ul>
  <ul class="nav navbar-nav navbar-right">
    <li ng-hide="navvm.isLoggedIn"><a href="login">Sign in</a></li>
    <li ng-show="navvm.isLoggedIn"><a ng-click="logOut()" href="">Logout</a></li>
  </ul>
</div>

然后我试图通过删除令牌来删除localStorage,如下所示:(控制器)

(function () {
  angular
   .module('meanApp')
   .controller('logoutCtrl', logoutCtrl);

     logoutCtrl.$inject = ['$location', '$window'];
     function logoutCtrl($location, $window) {
       logout = function() {
         $window.localStorage.removeItem('mean-token');
       };
     }
})();

(控制器):

(function () {

  angular.module('meanApp', ['ngRoute']);

  function config ($routeProvider, $locationProvider) {
    $routeProvider
      .when('/', {
        templateUrl: '/home/home.view.html',
        controller: 'homeCtrl',
        controllerAs: 'vm'
      })
      .when('/register', {
        templateUrl: '/auth/register/register.view.html',
        controller: 'registerCtrl',
        controllerAs: 'vm'
      })
      .when('/login', {
        templateUrl: '/auth/login/login.view.html',
        controller: 'loginCtrl',
        controllerAs: 'vm'
      })
      .when('/profile', {
        templateUrl: '/profile/profile.view.html',
        controller: 'profileCtrl',
        controllerAs: 'vm'
      })
      .when('/logout', {
        templateUrl: '/home/home.view.html',
        controller: 'logoutCtrl',
      })
      .otherwise({redirectTo: '/'});

    // use the HTML5 History API
    $locationProvider.html5Mode(true);
  }

  function run($rootScope, $location, authentication) {
    $rootScope.$on('$routeChangeStart', function(event, nextRoute, currentRoute) {
  if ($location.path() === '/profile' && !authentication.isLoggedIn()) {
    $location.path('/');
      }
    });
  }

  angular
    .module('meanApp')
    .config(['$routeProvider', '$locationProvider', config])
    .run(['$rootScope', '$location', 'authentication', run]);

})();

每当我尝试注销时,仍然会定义localStorage。我试过清理存储空间。试着删除它。也许我没有做正确的角度。我是所有这一切的新手所以请帮忙。谢谢!

3 个答案:

答案 0 :(得分:0)

您必须将$scope变量注入控制器并在$scope

上定义注销功能
     logoutCtrl.$inject = ['$location', '$window', '$scope'];//injecting the $scope

     function logoutCtrl($location, $window, $scope) {

         //defining logout function on the $scope
         $scope.logout = function() {
             $window.localStorage.removeItem('mean-token');
         };

     }

你也有错字。删除logOut()

上的“O”大写字母
<a ng-click="logout()" href="">Logout</a>

答案 1 :(得分:0)

不用窗口试试。

localStorage.removeItem('mean-token');

Fiddle

答案 2 :(得分:0)

您是否尝试将注销功能移至homeCtrl,以检查它是否在那里工作?