2014-04-30 8 views
15

मेरे पास दो फाइलें हैं जिनमें मैं अपने कोणीय ऐप में सेवाओं को परिभाषित करता हूं, लेकिन जब मैं उन्हें अपने निर्देश में दोनों का उपयोग करने का प्रयास करता हूं, तो मुझे एक त्रुटि मिलती है कि सेवा प्रदाता नहीं मिला है जो भी निर्देश मैं दूसरे को परिभाषित करता हूं। ऐसा लगता है कि एक सेवा दूसरे को ओवरराइट कर रही है। अगर मैं service2.js में मॉड्यूल परिभाषा myapp.services2 में बदलता हूं, तो यह काम करता है। मुझे लगता है कि मैं इस तरह के मॉड्यूल में कई कारखानों को जोड़ सकता हूं। क्या कोई यह बता सकता है कि मैं गलत तरीके से क्या कर रहा हूं?विभिन्न फाइलों में एक ही मॉड्यूल के लिए सेवाओं को परिभाषित करने वाले angularjs

service1.js:

var services = angular.module('myapp.services',[]); 
services.factory('Service1', function() { 
    // service code 
}); 

service2.js:

var services = angular.module('myapp.services',[]); 
services.factory('Service2', function() { 
    // service code 
}); 

mydirective.js:

angular.module('myappdirective', []).directive('myapp', ['Service1', 'Service2', 
function(service1,service2) { 
    // directive code 
}]); 
+0

आप दो बार सेवा मॉड्यूल को परिभाषित कर रहे हैं। आपको केवल इसे एक बार परिभाषित करने की आवश्यकता है (एक फ़ाइल में)। मेरी सबसे हाल की परियोजना में, मैंने var सेवाओं = angular.module लाइन को अपनी जेएस फ़ाइल (निश्चित रूप से ओवरकिल) में स्थानांतरित कर दिया। – aet

+0

इसे दूसरी बार देखना नहीं चाहिए और इसे फिर से परिभाषित नहीं करना चाहिए? –

+0

यदि आप इंजेक्शन सरणी को हटाते हैं तो मुझे लगता है कि यह इस तरह से काम करेगा - angular.module ('myapp.services'); – aet

उत्तर

44

यह डॉक्स से है:

बी eware कि angular.module ('myModule', []) का उपयोग मॉड्यूल myModule बना देगा और myModule नामक किसी भी मौजूदा मॉड्यूल को ओवरराइट करेगा। मौजूदा मॉड्यूल को पुनर्प्राप्त करने के लिए angular.module ('myModule') का उपयोग करें।

यहाँ मिला: https://docs.angularjs.org/guide/module

+16

मजेदार कैसे मौजूदा कार्यान्वयन लगभग हर किसी को भ्रमित कर रहा है। 'angular.createModule (, <निर्भरता>), angular.retrieve मॉड्यूल () 'इतने सारे प्रश्न नहीं उठाएंगे! ;) गलती से '[]' जोड़ना – Mirko

+1

का पता लगाने में बहुत मुश्किल है, मुझे लगता है कि यह काफी स्पष्ट है। मुझे JQuery के साथ काम करने के लिए उपयोग किया जाता है, इसलिए '.width() 'बनाम' .width (newWidth) जैसी चीजें कम से कम मेरे लिए काफी छोटी हैं। इसके अलावा, यह आपको केवल एक बार आश्चर्यचकित करेगा। अगली बार जब आप इंजेक्टर त्रुटि देखते हैं तो आपको यह बताते हुए कि मॉड्यूल नहीं मिला, आपको पता चलेगा कि आपने इसे फिर से किया है;) – tfrascaroli

0

यह संभव है, लेकिन त्रुटियों की संभावना है, इसलिए अनुशंसित नहीं

लिए छोटा सा संशोधन बनाओ क्या आप पहले से ही

कर रहे हैं बस फिर से नहीं है हो जाएगा मॉड्यूल वैरिएबल को service1.js के अलावा अन्य फाइलों में घोषित करें या मॉड्यूल परिभाषा को अपनी फाइल में डालें और इन जेएस फाइल को मॉड्यूल.जेएस, services.js, directive.js के क्रम में शामिल करें, तो यह

0 काम करेगा
संबंधित मुद्दे