2014-04-26 20 views
18

Qualcuno sa perché le variabili dell'oscilloscopio non vengono aggiornate? È sconvolgente per me. Le variabili sessionStorage vanno bene, ma quando le definisco all'interno delle variabili scope ho degli errori "indefiniti". Ho armeggiato con $ scope. $ Apply, ma a quanto pare lo scope è già stato digerito ...: S per favore aiuta un novizio.sessione Angularjstoret e ambito

if(sessionStorage.loggedIn){ 

    $scope.user = sessionStorage.user; 
    $scope.user.gravatar = sessionStorage.gravatar; 
    console.log($scope.user.gravatar); 
    console.log('Session variable is active'); 
    $scope.loggedIn = sessionStorage.loggedIn; 

    } 

il codice completo:

app.controller('loginCtrl', ['$scope','$route','Auth','$modal','$timeout', function($scope,$route,Auth,$modal,$timeout){ 

    if(sessionStorage.loggedIn){ 

    $scope.user = sessionStorage.user; 
    $scope.user.gravatar = sessionStorage.gravatar; 
    console.log($scope.user.gravatar); 
    console.log('Session variable is active'); 
    $scope.loggedIn = sessionStorage.loggedIn; 

    } 

    $scope.login = function(){ 
    Auth.save({ 
     'username': $scope.username, 
     'password': $scope.password 
    },function(data) { 
     $scope.loggedIn = true; 
     $scope.user = data.user; 
     $scope.user.gravatar = data.gravatar; 

     sessionStorage.loggedIn = $scope.loggedIn; 
     sessionStorage.user = data.user; 
     sessionStorage.gravatar = data.gravatar; 
     $route.reload(); 

    },function(response){ 
     $scope.flash = response.data.flash; 
     $scope.pop = true;  
     $timeout(function(){$scope.pop = false;}, 3000); 
    }) 

    }; 

    $scope.logout = function(){ 
    Auth.get({},function(){ 
     delete sessionStorage.user; 
     delete sessionStorage.gravatar; 
     delete sessionStorage.loggedIn; 
     $scope.loggedIn = false; 
     $timeout(function(){$route.reload();}, 1000); 
    }) 
    }; 


}]); 

Sintesi di catena di eventi: tronchi

1) utente nella

2) Dopo l'accesso, i dettagli dell'utente (oggetto JSON) sono memorizzati in sessionStorage.user = data.user e la variabile data.user in genere contiene questo tipo di informazioni {id: 1, username: "user123", firstname: "", lastname: "", email: "[email protected]"} -l'hash gravatar dell'utente è anche st ored in una variabile sessionStorage.user.gravatar.

3) Se l'utente si disconnette, le variabili sessionStorage vengono eliminate.

4) Tuttavia, se l'utente è ancora effettuato l'accesso, aggiorna/ricarica la pagina (dal browser), la variabile sessionStorage è ancora attivo, e contiene ancora i dati, MA per qualche ragione, quando ho impostato le variabili di scope per esempio. $scope.user = sessionStorage.user - la variabile scope rimane indefinita - nonostante sessionStorage.user sia perfettamente funzionante. Il problema sembra essere con lo scopo.

+0

Sei sicuro che sessionStorage.user è un oggetto? – JimmyRare

+0

puoi specificare la catena di eventi che stai invocando e quale dovrebbe essere il comportamento che ti aspetti – adrichman

+0

puoi farlo in jsfiddle, jsbin o plunker? importante anche il browser utilizzato: – Maslow

risposta

35

È necessario serializzare l'oggetto utente su JSON prima di archiviarlo su sessionStorage, poiché è implementato come una raccolta di valori stringa.

provare qualcosa di simile

sessionStorage.user = JSON.stringify($scope.user); 

e poi

$scope.user = JSON.parse(sessionStorage.user); 
+12

Sidenote: C'è anche ['angular.fromJson (json);'] (https://docs.angularjs.org/api/ng/function/angular.fromJson). – kaiser

5

Oggi angularjs non hanno la JSON.stringify basta assegnare i valori $ portata in sessionStorage

$sessionStorage.user = $scope.user;