2017-05-11 22 views
6

मैं वर्तमान में कोणीय 2 के आवेदन पर काम कर रहा हूं। मेरे पास 3 फीचर मॉड्यूल हैं जिनमें अन्य सब फीचर मॉड्यूल शामिल हैं। मैं फ़ीचर 2 के उप फ़ीचर मॉड्यूल में फीचर 1 के सब फीचर मॉड्यूल को लोड करना चाहता हूं और इसके विपरीत। नीचे नमूना कोड है।कोणीय 2: परिपत्र फ़ीचर मॉड्यूल निर्भरता

कार्रवाई routing.module.ts

const routes: Routes = [ 
    { 
     path: '', 
     component: ActionComponent, 
     children: [ 
      { 
      path: ':id', 
      loadChildren: 'app/action/action-detail/action-detail.module#ActionDetailModule' 
      } 
     ] 
    } 
]; 

कार्रवाई विस्तार-routing.module.ts

const routes: Routes = [ 
    { 
     path: '', 
     component: ActionDetailComponent, 
    },  
    { 
     path: 'topic-detail/:id', 
     loadChildren: 'app/topic/decision-topic-detail/decision-topic-detail.module#DecisionTopicDetailModule', 
    } 
] 

विषय-routing.module.ts

const routes: Routes = [ 
    { 
     path: '', 
     component: TopicComponent, 
     children: [ 
      { 
      path: ':id', 
      loadChildren: 'app/topic/decision-topic-detail/decision-topic-detail.module#DecisionTopicDetailModule' 
      } 
     ] 
    } 
]; 

निर्णय विषय-विस्तार-routing.module.ts

const routes: Routes = [ 
    { 
     path: '', 
     component: DecisionTopicDetailComponent, 
    },  
    { 
     path: 'action-detail/:id', 
     loadChildren: 'app/action/action-detail/action-detail.module#ActionDetailModule' 
    } 
] 

यह चक्रीय निर्भरता बनाता है और संकलन समय पर पार कर अधिकतम कॉल स्टैक आकार में त्रुटि की त्रुटि फेंकता है।

क्या इस त्रुटि को हल करने का कोई तरीका है। मुझे पता है कि एक ही तरीका है कि पूरे फीचर मॉड्यूल को स्वयं लोड करना है लेकिन यह व्यवहार्य स्थिति नहीं है।

अग्रिम धन्यवाद।

+0

यह कोणीय सीएलआई में एक बग है।https://github.com/angular/angular-cli/issues/6309 –

उत्तर

1

मार्गों एक जगह में रहने चाहिए घटकों से अलग और मॉड्यूल के बाहर उन घटकों की घोषणा की जाती

लंबे समय के लिए में।, मैं पैटर्न आप भी उपयोग कर रहे हैं का पालन किया। topic-routing.module.ts लगता है जैसे इसे topic घटकों के साथ रहना चाहिए। लेकिन हाल ही में मैंने इसके बारे में एक अलग रोशनी में सोचना शुरू कर दिया है, और यहां आपका कन्डर्रम इसे पूरी तरह से हाइलाइट करता है।

मैंने किसी दिए गए एप्लिकेशन के दिल के रूप में routes के बारे में सोचना शुरू कर दिया है। यह प्रतिमान बदलाव तब हुआ जब मैंने एक दूसरा आवेदन लिखना शुरू किया और मैंने पहले किए गए कई घटकों/मॉड्यूल का पुन: उपयोग करने का निर्णय लिया। मैंने देखा कि एकमात्र चीजें जिन्हें पुन: उपयोग करने का अर्थ नहीं था, वे मार्ग थे।

ऐसा लगता है जैसे मार्ग "ऐप" परिभाषित करते हैं और मॉड्यूल/घटक किसी दिए गए एप्लिकेशन द्वारा उपयोग किए जाने वाले ब्लॉक का निर्माण कर रहे हैं।

शीर्ष स्तर एप्लिकेशन में प्रत्येक मॉड्यूल के बाहर अपने मार्ग परिभाषाओं ले जाएँ:

कि प्रकाश में, मैं निम्नलिखित की सिफारिश करेंगे। वे app.routes के बगल में एक निर्देशिका में रह सकते हैं, और आप उन्हें अपनी वर्तमान फाइलों में वितरित कर सकते हैं, या यदि आपके पास उनमें से कई नहीं हैं, तो आप उन्हें एक ही फ़ाइल में विलय कर सकते हैं।

यह काउंटर-अंतर्ज्ञानी प्रतीत हो सकता है, और आप "लंबवत" समूह को खो देते हैं जहां सभी topic सामग्री विषयों के साथ रहती है और सभी action सामग्री कार्यों के साथ रहती है। लेकिन जब आप उन घटकों की तुलना में मूल रूप से विभिन्न जानवरों के रूप में मार्गों को देखते हैं, तो यह कम दर्दनाक है और यह निश्चित रूप से आपकी समस्या हल करता है।

src 
    |-app.component.ts 
    |-app.component.html 
    |-app.routes.ts <-- includes the routes in the sibling directory 
    |-routing 
     |- action.routes.ts 
     |- action-detail.routes.ts 
     |- topic.routes.ts 
     \- decision-topic-detail.ts 
    |-decision-topic-detail (module) 
    |-topic (module) 
    \-action (module) 
+0

यदि मैं अपने सभी मार्ग शीर्ष स्तर पर लिखता हूं, तो क्या मैं Angular2 की आलसी लोडिंग सुविधा की सुविधा को खो नहीं सकता? –

+0

मैंने आपके समाधान की कोशिश की, लेकिन इससे मदद नहीं मिली क्योंकि वास्तविक समस्या यहां क्रिया-विस्तार मॉड्यूल को विषय मॉड्यूल में आयात किया गया है और इसके विपरीत। नीचे देखें गिट https://github.com/vaibhavbparikh/circular-routes/tree/seperate-routes –

+0

@ पारिखविभा, मैं इस धारणा के तहत था कि विषय मॉड्यूल में कार्रवाई-विवरण मॉड्यूल आयात करने का एकमात्र कारण था क्योंकि आप मॉड्यूल में मार्ग साझा करने की कोशिश कर रहे थे। यदि यह मार्गों के लिए नहीं है, तो आपके पास उस परिपत्र निर्भरता का कारण क्या है? मॉड्यूल में परिपत्र निर्भरता नहीं हो सकती है; यदि कोई कारण है कि आप ए में बी शामिल हैं, तो बी में कुछ भी नहीं होना चाहिए, अन्यथा यह एक डिज़ाइन दोष है। –

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