2015-09-16 9 views
6

मैं एक कोणीय परियोजना पर काम कर रहा हूं, जहां मैंने नीचे दिखाए गए अनुसार मेरे राज्य निर्धारित किए हैं।angularjs ui-router stateparams अदृश्य पृष्ठ पर ताज़ा हो जाता है

$stateProvider.state('UserPanel', { 
    url: '/user', 
    params: { userId: null }, 
    views: { 
     '[email protected]': { 
      templateUrl: '/AngViews/UserPanel/UserPanel.UserDetails.html' 
     } 
    } 
}); 

जब मैं दृश्य पर जाएं, यह इसके साथ पैरामीटर लगता है, इसलिए इस हिस्से काम कर रहा है।

लेकिन जब मैं पृष्ठ को अपडेट करता हूं, तो यह पैरा को खो देता है। मुझे पता है कि अगर मैंने url चर में पैराम को परिभाषित किया है तो यह काम करेगा। लेकिन मैं इसे अदृश्य बनाना चाहता हूं।

मुझे कुछ this जैसा मिला है, लेकिन यह नहीं पता कि यह मेरी समस्या को ठीक करने वाला है या नहीं। अगर यह काम करता है तो यह काम नहीं कर सकता है। कोई भी जो समझा सकता है कि यह कैसे किया जा सकता है?

अपने समय के लिए धन्यवाद

+2

जब आप ऐप को रीफ्रेश करते हैं तो वास्तव में पूर्ण ऐप पुनरारंभ किया जाएगा। तो ऐप के भीतर कोई पिछला डेटा संग्रहीत नहीं किया जाएगा। एकमात्र हिस्सा जिसे रीफ्रेश नहीं किया जाएगा यूआरएल है। तो यदि आप यूआरएल में स्टेटपरम डालते हैं तो यह काम करेगा अन्यथा आपको स्थानीय स्टोरेज या डेटा स्टोर करने के लिए कुछ ऐसा करने की ज़रूरत है। – Indra

+0

मैं देखता हूं। लेकिन क्या इसे स्थानीय स्टोरेज में सहेजना या इसे केवल एक पेज के लिए कैश करना संभव है, और फिर इसे बदलते समय इसे हटा दें? – DaCh

+0

हाँ, यह संभव है। प्रत्येक मार्ग के लिए एक विशिष्ट संकल्प समारोह होता है। तो विशिष्ट मार्ग में आप स्थानीय भंडारण में डेटा सेट कर सकते हैं और दूसरे संकल्प में आपको स्थानीय स्टोरेज को साफ़ करने की आवश्यकता है। – Indra

उत्तर

4

मैं एक ही समस्या का सामना करना पड़ा और इस कोड के साथ इसे हल

angular.module('app').run(function($rootScope, $state, localStorageService) { 

    $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) { 
    var prefix = "stateParams."; 
    var fromStateName = prefix + fromState.name; 
    var toStateName = prefix + toState.name; 
    var f = true; 
    for (var k in toState.params) { 
    f = f && (JSON.stringify(toParams[k]) == JSON.stringify(toState.params[k])); 
    } 
    if (f && localStorageService.get(toStateName) != null) { 
    event.preventDefault(); 
    var savedToParams = localStorageService.get(toStateName); //retrieving toParams from local storage 
    localStorageService.remove(toStateName); 
    for (var k in toState.params) { 
     toParams[k] = savedToParams[k]; //update only the params {} not url params 
    } 
    $state.transitionTo(toState,toParams); 
    } else { 
    var toSave = {}; 
    for (var k in toState.params) { 
     toSave[k] = toParams[k]; //save only the params {} not url params 
    } 
    localStorageService.set(toStateName,toSave); 
    } 
    }); 

}); 

Gist

मैं 'कैश' राज्य संक्रमण के बीच पैरामीटर को localStorageService उपयोग करने का प्रयास ।

जब राज्य एक से राज्य बी के लिए जा रहा है, मैं पहले से ए

के लिए भंडारित किया पैरामीटर को दूर मैं तो अगर पैरामीटर कि भेजे जा रहे हैं बी को बी के राज्य परिभाषा पैरामीटर से मेल देखने के लिए जाँच, और यदि वे मेल खाते हैं तो मैं स्थानीय स्टोरेज से पैरा लोड करता हूं, क्योंकि इसका मतलब है कि उपयोगकर्ता ने ताज़ा किया है और पैरा को रीसेट कर दिया गया है।

मैंने कुछ मामलों में इस कोड का परीक्षण किया, लेकिन यह अभी भी पूरी तरह से परीक्षण नहीं किया गया है।

+0

अरे, स्थानीय स्टोरेज ही एकमात्र संभावना है? यूआरएल में या पारित पैराम? क्या कोई और तरीका है? – AlxVallejo

+0

वसा जैसा कि मुझे पता है कि नहीं है, जब उपयोगकर्ता रीफ्रेश करता है तो आपका ऐप पूरी तरह से पुन: प्रारंभ हो जाता है, इसलिए, आप अपना दायरा और कारखाना/सेवा डेटा खो देते हैं और इन डेटा को सुरक्षित रखने के लिए मुझे पता है कि एकमात्र तरीका स्थानीय स्टोरेज में है। –

+0

यह आलेख रीफ्रेश पर राज्य के लिए $ cookieStore का उपयोग करने पर चर्चा करता है। http://maffrigby.com/maintaining- सत्र-info-in-angularjs-when-you-refresh-the-page/ – HungryArthur

संबंधित मुद्दे