2014-05-05 36 views
5

usiłuję do przechowywania danych w moich usług podobnych do odpowiedzi na:Wyczyść dane serwisowe w angularjs

Processing $http response in service

 
app.factory('myService', function($http) { 
    var promise; 
    var myService = { 
    async: function() { 
     if (!promise) { 
     // $http returns a promise, which has a then function, which also returns a promise 
     promise = $http.get('test.json').then(function (response) { 
      // The then function here is an opportunity to modify the response 
      console.log(response); 
      // The return value gets picked up by the then in the controller. 
      return response.data; 
     }); 
     } 
     // Return the promise to the controller 
     return promise; 
    } 
    }; 
    return myService; 
}); 

app.controller('MainCtrl', function(myService,$scope) { 
    $scope.clearData = function() { 
    $scope.data = {}; 
    }; 
    $scope.getData = function() { 
    // Call the async method and then do stuff with what is returned inside our own then function 
    myService.async().then(function(d) { 
     $scope.data = d; 
    }); 
    }; 
}); 

Jednak zauważyłem, że dane w moich usług utrzymuje się nawet po wylogowaniu . W ten sposób mogłem zalogować się jako zupełnie inny użytkownik i zobaczyć dane, których nie powinienem widzieć.

Jak mogę wyczyścić dane po wylogowaniu? Oczywiście mogę ręcznie wyczyścić wszystko we wszystkich moich usługach, ale szukam bardziej ogólnego podejścia, takiego jak "wyczyść wszystkie dane użytkownika". Próbowałem wymusić odświeżenie strony i działa, ale nie podoba mi się flash, który produkuje.

edit: Kod z przykładu

+0

_how_ dokładnie "podobny" chociaż? (pokaż swój kod) Jeśli robisz to dobrze, tak naprawdę nie powinieneś mieć żadnych trwałych danych w serwisie. – thescientist

+0

Czy możesz udostępnić swój kod dostępu? – Chandermani

+0

Powinienem przeformułować moje pytanie, z wylogowaniem mam na myśli moją własną funkcję wylogowania, która po prostu usuwa niektóre dane użytkownika. Usługi są nadal tworzone i zawierają te same rzeczy, co przed wylogowaniem. – user1354603

Odpowiedz

0

Aby wyczyścić dane w MyService może mieć funkcję destroy(), która jest wywoływana po $ scope.clearData. Na przykład:

app.factory('myService',function('$http'){ 
    /// do you stuff 
    return{ 
    myServices : //..., 
    destroy : function(){ 
     promise = null;//destroy promise 
    } 
    } 
}); 

Na marginesie, to prawdopodobnie nie chcą przechowywać dane w $ zakresu. Możesz chcieć oddzielić kontrolę i dane.

0

Używam narzędzi kątowych do zarządzania użytkownikami. Oto co mam w mojej służbie, aby wyczyścić dane na wylogowania:

app.service("MyService", ["$rootScope", function($rootScope) { 
    // destroy the user data on logout 
    self = this; 
    this.shouldBeDestroyed = "foo"; 

    $rootScope.$on('devise:logout', function(event) { 
    self.shouldBeDestroyed = null; 
    }); 
}); 

chciałabym znaleźć bardziej niezawodny sposób, aby zniszczyć wrażliwe obiekty usług. To rozwiązało mój problem.