2017-03-24 2 views
15

यहां मेरे कुछ कोणीय/टाइपस्क्रिप्ट एप्लिकेशन में कुछ बेकार त्रुटि है। जब तक कोई त्रुटि संदेश बेहतर नहीं करता है, हम इसके बारे में क्या कर सकते हैं? यह होने वाली सबसे संभावित स्थितियां क्या हैं? यात्रुटि: "अनुक्रमित अपरिभाषित प्रदाता! आमतौर पर इसका मतलब है कि आपके पास गोलाकार निर्भरता है"

import {Injectable, NgModule} from '@angular/core'; 

@NgModule({providers: [FooService]}) // WRONG: used before declared 
export class FooModule { 
} 

@Injectable() 
export class FooService { 
} 

आप पहले सेवा की घोषणा के द्वारा इसे ठीक कर सकते हैं, आप कर सकते हैं:

Uncaught Error: Encountered undefined provider! Usually this means you have a circular dependencies (might be caused by using 'barrel' index.ts files. 
    at Object.syntaxError 
    at eval  at Array.forEach (native) [<root>] 
    at CompileMetadataResolver._getProvidersMetadata 
    at CompileMetadataResolver.getNgModuleMetadata 
    at CompileMetadataResolver.getNgModuleSummary 
    at eval 
... 

उत्तर

10

एक संभावना यह एक ही फाइल में एक सेवा और मॉड्यूल घोषित करने के लिए कोशिश कर रहा है, और सेवा से पहले मॉड्यूल की घोषणा forwardRef का उपयोग इस प्रकार करें:

import {forwardRef, Injectable, NgModule} from '@angular/core'; 

@NgModule({providers: [forwardRef(() => FooService)]}) 
export class FooModule { 
} 

@Injectable() 
export class FooService { 
} 
+0

पूरी तरह से काम करता है! क्या कोई ऐसा परिदृश्य है जहां इस तरह एक फॉरवर्ड रीफ बनाना एक बुरा विचार होगा? – cjsimon

+1

मुझे लगता है कि आगे कभी भी खतरनाक नहीं है, अगर आपके प्रतीकों का उपयोग करने से पहले घोषित किया जाता है तो केवल अनावश्यक है। कभी-कभी चीजों को अलग-अलग फाइलों में रखना बेहतर होता है, लेकिन छोटी/छोटी मॉड्यूल घोषणा हमेशा अतिरिक्त फ़ाइल के लायक नहीं होती है। –

+0

मेरे पास अलग-अलग फाइलों में मेरे घटक हैं। क्या प्रदाता मॉड्यूल को पहले घोषित करने के लिए पर्याप्त होगा, या क्या इसे अन्य मॉड्यूल से पहले पृष्ठ पर प्रारंभ करना होगा? – cjsimon

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