2016-11-27 13 views
7

मैं उपयोग Angular2 v2.2.3Angular2 - अतुल्यकालिक निर्भरता इंजेक्शन

मैं forRoot (के साथ आम मॉड्यूल बना लिया है) समारोह, इस तरह:

export function ConfigFactory(http:Http):Promise<ConfigService> {  
    return http.get('confg/config.json').map(r => { 
     return new ConfigService(r); 
    }).toPromise(); 
} 
:

... 
    public static forRoot(): ModuleWithProviders { 
    return { 
     ngModule: CommonsModule, 
     providers: [ 
      SomeOtherDependency, 
      { 
       provide: ConfigService, 
       useFactory: ConfigFactory, 
       deps: [Http] 
      }     
     ] 
    }; 

यहाँ मेरी ConfigFactory है

मैंने वादा और पर्यवेक्षक को वापस करने की कोशिश की है।

प्रदाताओं में परिभाषित कुछ अन्य निर्भरता को ConfigService की आवश्यकता होती है। समस्या यह है कि कोणीय वादे से हल मूल्य को इंजेक्ट नहीं करता है बल्कि खुद वादा करता है।

मैं कोणीय को उचित निर्भरता के साथ हल होने तक प्रतीक्षा करने के लिए मजबूर कैसे कर सकता हूं और केवल तब अन्य निर्भरताओं पर इंजेक्ट कर सकता हूं?

मैंने विभिन्न दृष्टिकोणों की कोशिश की है और हमेशा इंजेक्शन मूल्य वादा या देखने योग्य है। जैसे इंजेक्टर अनदेखा करता है कि किस तरह का कारखाना लौटा। पूरे आवेदन शुरू होने से पहले मुझे कुछ जेसन फाइलों को लोड करने की आवश्यकता है

+0

की संभावित डुप्लिकेट:

export function ConfigFactory(config:ConfigService, http:Http):Function { return() => config.load(http); } 

और मॉड्यूल में: यहाँ कारखाने जो APP_INITIALIZER साथ काम करता है अद्यतन किया जाता है/प्रश्न/38127741/कोणीय-2-सेवाएं-उपभोग करने वाली-अन्य-सेवाएं-पहले-कॉल-ए-विधि) – estus

+0

इस प्रश्न पर भी टिप्पणियां देखें http://stackoverflow.com/questions/40522938/lazy-loading- मॉड्यूल -with-app-startizer? noredirect = 1 # comment68288686_40522938 – yurzui

+0

मैंने पूछे जाने से पहले इस विषय को देखा है। वे मेरे लिए काम नहीं करते हैं। –

उत्तर

3

मुझे कोई समस्या मिली है।

मैं अपने कारखाने से एक वादा वापस कर रहा था जब मुझे इसके बजाय कार्य वापस करने की आवश्यकता थी। इसके अलावा मैं प्रदाता अनुभाग से "बहु" तर्क चूक गया। [- उपभोक्ता दूसरों सेवाओं से पहले एक विधि कॉल सेवाएं कोणीय 2] (http://stackoverflow.com

providers: [ 
    ConfigService, 
    { 
     provide: APP_INITIALIZER, 
     useFactory: ConfigFactory, 
     deps: [ConfigService, Http], 
     multi: true 
    }, 
] 
+0

मैं इस मान का उपयोग किसी अन्य घटक पर कैसे कर सकता हूं? कृपया plnkr.co – gtzinos

+0

का उपयोग करके एक उदाहरण भेजें हमेशा इसे पसंद करें: कन्स्ट्रक्टर (निजी कॉन्फ़िगरेशन सेवा: ConfigService) {}। मुझे बिना किसी समस्या के इंजेक्शन दिया जाएगा। –

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