मैंकैसे ओवरराइड करने के लिए/परिवर्तन 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
प्रदाता सिंगलटन है, इसे बदलना चाहिए।
नियंत्रक के अंदर मॉड्यूल स्तर सेवा/प्रदाता/मूल्य बदलने का अधिकार नहीं है क्योंकि यह सभी के लिए इसे बदल देगा। यदि मूल्य को बदलना है तो इसे केवल एक सेवा में लपेटना और सेटटर/गेटर होना आसान है। ऐप चलने पर प्रारंभिक सिंगलटन को अधिलेखित करने की अनुमति देने के लिए समझ में नहीं आता है। – GillesC
रन चरण के दौरान इंजेक्शन निर्भरता के मूल्य को बदलना लगभग सही दृष्टिकोण नहीं है। यदि आप नियंत्रकों/सेवाओं/आदि के बीच राज्य पारित करने की कोशिश कर रहे हैं, तो [ईवेंट] (https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$emit) का उपयोग करने पर विचार करें। –