2013-02-12 12 views
15

मैं अंगुलरजेएस के लिए नया हूं और खुद को एक साधारण छोटा ऐप बनाने की कोशिश कर रहा हूं। मेरे पास $resource के साथ ऐप के लिए JSON डेटा है, और यह डेटा एकाधिक विचारों/मार्गों पर समान होना चाहिए। हालांकि, जब मैं एक नए मार्ग पर जाता हूं, तो JSON डेटा ($scope.data के रूप में संग्रहीत) अब नए दृश्य के लिए उपलब्ध नहीं है। इस डेटा को नए दृश्य में पारित करने के लिए मैं क्या कर सकता हूं और किसी अन्य fetch की आवश्यकता नहीं है? (ट्यूटोरियल फोन-कैटलॉग ऐप हर बार इस डेटा को फिर से प्राप्त करता है जो मैं बता सकता हूं।)AngularJS रूटिंग के माध्यम से डेटा कैसे संरक्षित करें?

जो मैं समझता हूं, $rootScope ऐसा कर सकता है लेकिन ऐसा लगता है कि यह आमतौर पर डूब जाता है। मैं क्षमा चाहता हूं अगर यह ज्यादा समझ में नहीं आता है; मैं यहां गहरे छोर में बहुत ज्यादा डाइविंग कर रहा हूं।

+0

[कोणीय, मार्गों के बीच गुंजाइश गुजरने के संभावित डुप्लिकेट) (http://stackoverflow.com/questions/13882077/angularjs-passing-scope-between-routes) –

उत्तर

17

डेटा स्टोर करने के लिए एक सेवा का उपयोग करें। प्रत्येक नियंत्रक में उस सेवा को इंजेक्ट करें जिसे इस डेटा तक पहुंच की आवश्यकता है। प्रत्येक बार एक नियंत्रक बनाया और निष्पादित होता है (क्योंकि आप किसी अन्य दृश्य/मार्ग पर स्विच करते हैं), यह डेटा के लिए सेवा से पूछ सकता है। अगर सेवा में अभी तक डेटा नहीं है, तो यह सर्वर से अनुरोध कर सकता है और नियंत्रक को एक वादा वापस कर सकता है (इसे कैसे करें इसके लिए नीचे देखें)। यदि सेवा में डेटा है, तो यह तुरंत नियंत्रक को वापस कर सकता है।

भी देखें Processing $http response in service

ध्यान दें कि सेवाओं एकमात्र हैं, नियंत्रकों के विपरीत है।

एक और भिन्नता: जब सेवा बनाई जाती है, तो यह डेटा स्वयं ही प्राप्त कर सकती है, और उसके बाद इसे बाद में उपयोग के लिए स्टोर कर सकती है। नियंत्रक सेवा पर संपत्तियों या कार्यों को देख सकते हैं। इस दृष्टिकोण के उदाहरण के लिए How do I store a current user context in Angular?

+0

पूरी तरह से धन्यवाद प्रतिक्रिया! दुर्भाग्य से, मैं अभी भी इसे काम करने के लिए प्रतीत नहीं कर सकता (मैं पहली विधि की कोशिश कर रहा हूं, जो मेरे लिए अधिक प्राकृतिक लगता है)। मेरे पास दो मार्गों को परिभाषित करने वाला '$ रूटप्रोवाइडर 'है, अब प्रत्येक नियंत्रक को उसी मैपिंग के लिए। नियंत्रक 'service.async() को कॉल करता है। फिर (...)' और सेवा की 'async' विधि' http.get ('/ data.json') द्वारा परिभाषित वादा वापस करती है। और हर बार जब मैं ऐप के भीतर एक नए मार्ग पर नेविगेट करता हूं, तो 'data.json' के लिए एक नया HTTP अनुरोध किया जाता है। किसी भी विचार की बहुत सराहना की जाएगी। – JacobEvelyn

+0

@ कॉन्स्टेबल जो, [$ http कैशिंग] को चालू करने का प्रयास करें (http://stackoverflow.com/questions/14117653/how-to-cache-an-http-get-service-in-angularjs)। मुझे अपने जवाब में उल्लेख किया जाना चाहिए था। –

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