2015-08-03 13 views
7

Oto mój kod.Jak wyczyścić dane lokalne w jonowym?

$scope.logout=function(){ 
    localstorage.set('user_id', ""); 
    localstorage.set('access-token', ""); 
    localstorage.set('isUserTraverseColony', 0); 
    localstorage.set('isStarted', 0); 
    $window.localStorage.clear(); 
    $window.localStorage.removeItem(access-token); 
    $ionicHistory.clearCache(); 
    $ionicHistory.clearHistory(); 
}; 

Chcę usunąć zmienną dostępu żeton z mojego localStorage, to działa dobrze dla przeglądarki podczas korzystania

$window.localStorage.clear(); 
$window.localStorage.removeItem(access-token); 

ale jej nie pracuje dla mojej aplikacji.

tutaj jest moja fabryka localStorage

angular.module('starter.controllers').factory('localstorage', ['$window', '$localStorage','$q', function ($window, $localStorage,$q) { 
    return { 
     set: function (key, value) { 
      var deferred = $q.defer(); 
      $window.localStorage[key] = value; 
       deferred.resolve(1); 
       return deferred.promise; 
     }, 
     get: function (key, defaultValue) { 
      return $window.localStorage[key] || defaultValue; 
     }, 
     setObject: function (key, value) { 
      $window.localStorage[key] = JSON.stringify(value); 
     }, 
     getObject: function (key) { 
      return JSON.parse($window.localStorage[key] || '{}'); 
     } 
    } 

}]); 

jakiś pomysł?

+0

'access-tokan' to literówka, czy masz to w swoim kodzie? Czy próbowałeś użyć 'localstorage.clear()' (usunąć '$ window')? – JcDenton86

+0

Używam lokalnej fabryki pamięci, zredagowałem moje pytanie –

Odpowiedz

6

Zetknąłem się również z tym samym problemem dawno temu. Używałem zmiennej globalnej dla lokalnej pamięci masowej. Twój kod wydaje się być w porządku. Ale można zoptymalizować to lepiej

$scope.logout = function(){ 
    $window.localStorage.clear(); 
    $ionicHistory.clearCache(); 
    $ionicHistory.clearHistory(); 
}; 

Nie trzeba ustawić

localstorage.set('user_id', ""); 
localstorage.set('access-token', ""); 
localstorage.set('isUserTraverseColony', 0); 
localstorage.set('isStarted', 0); 

ponieważ jesteś ich wyczyszczenie.

4

Można dodać metodę clear() do zwyczaju localstorage usługę:

angular.module('starter.controllers').factory('localstorage', ['$window', '$localStorage','$q', function ($window, $localStorage,$q) { 
    return { 
     set: function (key, value) { 
      $window.localStorage.setItem(key, value); 
     }, 
     get: function (key, defaultValue) { 
      return $window.localStorage.getItem(key) || defaultValue; 
     }, 
     setObject: function (key, value) { 
      $window.localStorage.setItem(key, JSON.stringify(value)); 
     }, 
     getObject: function (key) { 
      return JSON.parse($window.localStorage.getItem(key) || '{}'); 
     }, 
     clear: function() { 
      $window.localStorage.clear(); 
     } 
    } 

}]); 

Uwaga: zaktualizowałem swoją usługę usuwania obietnicę ponieważ HTML5 localStorage is syncronous i przy użyciu standardowego pobierania i ustawiania metod

a następnie w was kontroler:

$scope.logout = function(){ 
    localstorage.clear(); 
    $ionicHistory.clearCache(); 
    $ionicHistory.clearHistory(); 
};