【问题标题】:Angular Logout won't clear local storageAngular Logout 不会清除本地存储
【发布时间】:2017-02-25 15:01:53
【问题描述】:

所以这是我在 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。我试过清理存储。尝试删除它。也许我没有做正确的角度。我对这一切都很陌生,所以请帮忙。谢谢!

【问题讨论】:

  • 您是否添加了断点或 console.log 以确保正在运行注销代码?

标签: javascript angularjs node.js express


【解决方案1】:

您必须将$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>

【讨论】:

  • 这是有道理的。我尝试注入作用域,本地存储仍按定义显示。我不知道该怎么做才能解决这个问题??
【解决方案2】:

尝试无窗口。

localStorage.removeItem('mean-token');

Fiddle

【讨论】:

  • 你能弄个小提琴看看吗?我以这种方式使用localStorage 没有问题。用小提琴会更容易帮你。
  • 看看我的小提琴
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2022-08-09
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    相关资源
    最近更新 更多