2014-11-25 7 views
5

मैंकैसे ओवरराइड करने के लिए/परिवर्तन AngularJS मूल्य प्रदाता का मूल्य

angular.module("data", []).value('apiBase', '/api1/data') 
रनटाइम पर

value- ओवरराइड करना चाहते, मैं हूँ-

angular.module("data").value('apiBase', '/someotherapi/data') 
कुछ सेवा/नियंत्रक में

इसे संशोधित करने की कोशिश की है, लेकिन यह असफल रहा, यह एपीआईबेस के मूल्य को ओवरराइड नहीं किया।

मैंने अपने नियंत्रक में apiBase इंजेक्ट करने और इसे बदलने की कोशिश की।

angular.module('data').controller(function(apiBase){apiBase = '/someotherapi/data'}) 

यह विफल रहा।

angular.module('data').controller(function(apiBase){apiBase.api_base_url = '/someotherapi/data'}) 

यह काम करता है:

तो मैं जैसे

angular.module("data", []).value('apiBase', {"api_base_url":"/api1/data"}) 

तो नियंत्रक में इसे संशोधित करने के लिए एक वस्तु apiBase defination बदलने की कोशिश की। तो मेरा सवाल है: क्यों angular.module('data').value('samekey', 'newvalue') मूल्य को ओवरराइड नहीं कर सकता है? मूल्य को संशोधित क्यों नहीं कर सकता है जब यह केवल एक स्ट्रिंग/संख्या (प्राथमिक प्रकार। दूसरा प्रयास) है। मेरी राय में Value प्रदाता सिंगलटन है, इसे बदलना चाहिए।

+0

नियंत्रक के अंदर मॉड्यूल स्तर सेवा/प्रदाता/मूल्य बदलने का अधिकार नहीं है क्योंकि यह सभी के लिए इसे बदल देगा। यदि मूल्य को बदलना है तो इसे केवल एक सेवा में लपेटना और सेटटर/गेटर होना आसान है। ऐप चलने पर प्रारंभिक सिंगलटन को अधिलेखित करने की अनुमति देने के लिए समझ में नहीं आता है। – GillesC

+0

रन चरण के दौरान इंजेक्शन निर्भरता के मूल्य को बदलना लगभग सही दृष्टिकोण नहीं है। यदि आप नियंत्रकों/सेवाओं/आदि के बीच राज्य पारित करने की कोशिश कर रहे हैं, तो [ईवेंट] (https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$emit) का उपयोग करने पर विचार करें। –

उत्तर

7

कृपया dependency injection AngularJS में कैसे काम करता है इस पर दस्तावेज़ पढ़ें। विन्यास चरण और रन चरण -

असल में, AngularJS आवेदन दो चरणों में बनाया जाता है। सेवा के साथ .value() पंजीकरण करने जैसे सभी कॉन्फ़िगरेशन कोड कॉन्फ़िगरेशन चरण के दौरान किया जाता है। एक बार यह चरण समाप्त हो जाने पर, कोई और कॉन्फ़िगरेशन नहीं किया जा सकता है और रन चरण शुरू होता है, जहां आपका मुख्य मॉड्यूल डीओएम, नियंत्रकों और सेवाओं को बूटस्ट्रैप किया जाता है, इत्यादि शुरू होता है। यह निर्भरता इंजेक्शन को एक साधु, निर्धारिक तरीके से काम करने की अनुमति देता है (इसकी आईडी द्वारा इंजेक्शन करने का अनुरोध हमेशा एक ही आईडी के लिए एक ही चीज़ देता है)।

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