2014-05-05 19 views
5

Ich bin in meinen Diensten ähnlich wie die Antwort in Daten zu speichern versuchen:Klar Servicedaten 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; 
    }); 
    }; 
}); 

jedoch bemerkte ich, dass die Daten in meinen Diensten auch nach der Abmeldung weiterhin bestehen . Somit könnte ich mich als völlig anderer Benutzer anmelden und Daten sehen, die ich nicht sehen sollte.

Wie kann ich Daten nach dem Abmelden löschen? Sicher, ich könnte alles in all meinen Diensten manuell löschen, aber ich suche nach einem allgemeineren Ansatz wie "alle Benutzerdaten löschen". Ich habe versucht, eine Seite zu aktualisieren, und es funktioniert, aber ich mag den Blitz nicht, der produziert wird.

bearbeiten: Code aus Beispiel

+0

_how_ genau "ähnlich" obwohl? (d. h. zeigen Sie Ihren Code) Wenn Sie es richtig machen, sollten Sie sowieso keine persistenten Daten im Service haben. – thescientist

+0

Können Sie Ihren Servicecode teilen? – Chandermani

+0

Ich sollte meine Frage neu formulieren, mit Logout meine ich meine eigene Logout-Funktion, die nur einige Benutzerdaten entfernt. Dienste werden weiterhin instanziiert und enthalten die gleichen Dinge wie vor dem Abmelden. – user1354603

Antwort

0

die Daten in myService zu löschen, können Sie eine zerstört() Funktion, die auf $ scope.clearData genannt wird. Zum Beispiel:

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

Auf einer Seite beachten, werden Sie wahrscheinlich nicht wollen, Daten in $ Umfang zu speichern. Vielleicht möchten Sie Controlling und Daten trennen.

0

Ich benutze angular-devise, um meine Benutzer zu verwalten. Hier ist, was ich in meinem Dienst haben zu deaktivieren, Daten beim Abmelden:

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

Ich würde gerne einen zuverlässigere Weg finden, um sensible Objekte in Dienstleistungen zu zerstören. Das hat mein Problem gelöst.