2016-01-18 5 views
7

एक पृष्ठ पर, मेरे पास कई कोणीय मॉड्यूल हैं। प्रत्येक मॉड्यूल के लिए मैं एक स्थिर परिभाषित करता हूं जिसमें मॉड्यूल का संस्करण होता है।AngularJS module.constant(): केवल मॉड्यूल के अंदर निरंतर परिभाषित करने के लिए कैसे?

var module1 = angular.module('module1').constant('version', '1.2.3'); 
var module2 = angular.module('module2').constant('version', '2.0.0'); 
... 

मैं हालांकि एक निरंतर एक मॉड्यूल के अंदर परिभाषित किया गया था। लेकिन जब मैं निरंतर मॉड्यूल 1 के अंदर उपयोग करता हूं, तो मुझे प्राप्त मूल्य '2.0.0' है ...

क्या एक मॉड्यूल के लिए उचित (या कुछ और) परिभाषित करने का कोई तरीका है?

संपादित करें: वैकल्पिक समाधान के लिए, क्या आप कृपया इसका उपयोग कैसे करें, उदाहरण के लिए नियंत्रक घोषणा में?

module2.controller('myCtrl', function($scope, $http, $q, ..., version){ 
    // Here I can use the constant 'version' 
} 
+0

देखें कि क्या आप 'मॉड्यूल 1' की निर्भरता के रूप में 'मॉड्यूल 2' आयात करते हैं, उस स्थिति में 'संस्करण' निरंतर ओवरराइडन – nhd

+2

संभव हो सकता है [मॉड्यूल और नामस्थान/एंगुलरजेएस में नाम टक्कर] का संभावित डुप्लिकेट (http: // stackoverflow। कॉम/प्रश्न/13406791/मॉड्यूल-एंड-नेमस्पेस-नाम-टकराव-इन-एंजुलरजेस) – Zakaria

उत्तर

6

एक बहुत अच्छा सवाल है। मैं इसके लिए त्वरित समाधान के बारे में सोच सकता हूं:

angular.module('module1').constant('module1.version', '1.2.3'); 
angular.module('module2').constant('module2.version', '2.0.0'); 

मुझे नहीं पता कि यह आपकी आवश्यकताओं के अनुरूप कितना है। लेकिन मुझे उम्मीद है कि यह मदद करता है।

मुख्य समस्या कोणीय में नामकरण है। आपके पास सेवाओं/स्थिरांक/मूल्यों आदि के लिए समान नाम नहीं हो सकता है। वे ओवरराइट हो जाएंगे। मैंने इस समस्या को "नेमस्पेस" के साथ हल किया जैसा मैंने आपको ऊपर दिखाया था।

नाम की तरह नाम स्थान इंजेक्शन लगाने का उदाहरण: http://codepaste.net/5kzfx3

संपादित करें:

अपने उदाहरण के लिए, आप यह बहुत की तरह इस्तेमाल कर सकते हैं:

module2.controller('myCtrl', ['$scope', '$http', '$q', ... , 'module2.version'], function($scope, $http, $q, ..., version){ 
    // Here I can use the constant 'version' 
} 
+0

मैं इसके नाम पर एक बिंदु रखने के निरंतर इंजेक्ट कैसे कर सकता हूं? (उदाहरण के लिए मेरे मॉड्यूल के अंदर एक नियंत्रक में) – Eria

+0

angular.module()। सेवा (['module1.version'], फ़ंक्शन (संस्करण) {}); आप उपनाम हो सकते हैं। यह इस तरह निर्भरताओं को इंजेक्ट करने का भी एक अच्छा अभ्यास है। उदाहरण: http://codepaste.net/5kzfx3 –

+0

इंजेक्शन के लिए जो सुझाव देते हैं, उसे मुझे निम्न त्रुटि दें: 'अज्ञात प्रदाता: module1.infoProvider <- module1.info <- myCtrl' – Eria

1

होता है ऐसा इसलिए है क्योंकि module2 module1 निरंतर अधिभावी है ।

आप नाम के रूप में moduleName.version का उपयोग कर सकते हैं, लेकिन एक ही नाम का उपयोग करना संभव नहीं है।

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