2014-04-26 9 views
18

कोई भी जानता है कि मेरे दायरे चर को अपडेट क्यों नहीं किया जा रहा है? यह मेरे लिए दबदबा है। SessionStorage चर ठीक है लेकिन जब मैं उन्हें स्कोप चर के भीतर परिभाषित करता हूं .. मुझे 'अपरिभाषित' त्रुटियां मिलती हैं। मैंने $ स्कोप के साथ tinkered किया है। $ आवेदन करते हैं, लेकिन जाहिर है कि दायरा पहले से ही पच रहा है ...: एस कृपया एक नौसिखिया बाहर मदद करें।कोणीय सत्र सत्र और दायरा

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; 

    } 

पूर्ण कोड:

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


}]); 

घटनाओं की श्रृंखला का सारांश:

2) सफलतापूर्वक प्रवेश होने में

1) उपयोगकर्ता लॉग, उपयोगकर्ता के विवरण (json वस्तु) sessionStorage.user = data.user में संग्रहीत हैं और data.user चर में आमतौर पर इस प्रकार की जानकारी होती है {id: 1, username: "user123", firstname: "", lastname: "", email: "[email protected]"} - उपयोगकर्ता का गुरुत्वाकर्षण हैश भी सेंट है एक सत्र में oredStorage.user.gravatar चर।

3) यदि उपयोगकर्ता लॉग आउट करता है, तो सत्र स्टोरेज चर हटा दिए जाते हैं।

4) फिर भी, यदि उपयोगकर्ता अभी भी में लॉग ऑन है, ताज़ा करता है/ब्राउज़र से पेज (पुनः लोड), sessionStorage चर अभी भी सक्रिय है, और अभी भी, डेटा, लेकिन किसी कारण से शामिल जब मैं गुंजाइश चर सेट जैसे। $scope.user = sessionStorage.user - स्कोप वैरिएबल अवशोषित बनी हुई है - sessionStorage.user पूरी तरह से व्यवहार्य होने के बावजूद। यह मुद्दा दायरे के साथ प्रतीत होता है।

+0

में $ गुंजाइश मान निर्दिष्ट नहीं है आप कर रहे हैं सुनिश्चित करें कि sessionStorage.user एक ऑब्जेक्ट है? – JimmyRare

+0

क्या आप उन घटनाओं की श्रृंखला निर्दिष्ट कर सकते हैं जिन्हें आप आमंत्रित कर रहे हैं और आप जिस व्यवहार की अपेक्षा कर रहे हैं वह – adrichman

+0

होना चाहिए, क्या आप इसे jsfiddle, jsbin, या plunker में प्राप्त कर सकते हैं? यह भी महत्वपूर्ण हो सकता है कि आप किस ब्राउज़र का उपयोग कर रहे हैं – Maslow

उत्तर

35

सत्रस्टोररेज पर संग्रहीत करने से पहले आपको अपने उपयोगकर्ता ऑब्जेक्ट को JSON पर क्रमबद्ध करने की आवश्यकता है, क्योंकि इसे स्ट्रिंग मानों के संग्रह के रूप में कार्यान्वित किया जाता है। जैसे

कोशिश कुछ इस

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

और फिर

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

सिडेनोट: [angular.fromJson (जेसन) है; '] (https://docs.angularjs.org/api/ng/function/angular.fromJson) भी। – kaiser

5

आजकल AngularJS JSON.stringify सिर्फ sessionStorage

$sessionStorage.user = $scope.user;