2014-05-05 17 views
5

sto cercando di memorizzare i dati nei miei servizi simili alla risposta in:dati servizio chiaro in 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; 
    }); 
    }; 
}); 

Tuttavia, ho notato che i dati nei miei servizi persiste anche dopo il logout . Quindi potrei accedere come utente completamente diverso e vedere i dati che non dovrei vedere.

Come posso cancellare i dati dopo il logout? Certo, potrei cancellare manualmente tutto in tutti i miei servizi, ma sto cercando un approccio più generale come "cancella tutti i dati utente". Ho provato a forzare un aggiornamento della pagina, e funziona, ma non mi piace il flash che produce.

edit: Codice dall'esempio

+0

_how_ esattamente "simile"? (mostra il tuo codice) Se lo stai facendo bene, in realtà non dovresti comunque avere dati persistenti nel servizio. – thescientist

+0

Puoi condividere il tuo codice di servizio? – Chandermani

+0

Dovrei riformulare la mia domanda, con logout intendo la mia funzione di logout che rimuove solo alcuni dati utente. I servizi sono ancora istanziati e contengono le stesse cose di prima del logout. – user1354603

risposta

0

Per cancellare i dati in myService, si può avere una funzione destroy() che viene chiamato $ scope.clearData. Per esempio:

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

Una nota a parte, probabilmente non si desidera memorizzare i dati in $ portata. Potresti voler separare il controllo e i dati.

0

Sto usando angular-devise per gestire i miei utenti. Ecco quello che ho nel mio servizio per cancellare i dati alla chiusura della sessione:

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; 
    }); 
}); 

Mi piacerebbe trovare un modo più affidabile per distruggere gli oggetti sensibili nel settore dei servizi. Questo ha risolto il mio problema.

Problemi correlati