2016-09-28 14 views
13

मेरे पास एक कोणीय 2.0 (स्थिर संस्करण) ऐप है जहां इकाइयों में से एक project है। इन projects में से प्रत्येक के लिए, मैं इसके विवरण करवाते विभिन्न वर्गों/मार्गों फैल गया है:कोणीय 2 - माता-पिता और बाल मार्गों के लिए एक ही रिज़ॉल्यूवर का उपयोग करें

  • project/:id/overview
  • project/:id/documents
  • project/:id/logs
  • आदि

project रिटर्न के लिए एपीआई के सबसे एक कॉल में डेटा, इसलिए मुझे इसे एक बार कॉल करने की आवश्यकता है, और इसे विभिन्न बाल मार्गों के लिए उपलब्ध कराएं।

मेरे मार्गों लगता है:

export const routing: ModuleWithProviders = RouterModule.forChild([ 
    { path: 'projects',     component: ProjectsComponent }, 
    { path: 'project/new',    component: NewProjectComponent }, 
    { 
     path: 'project/:id', 
     component: ProjectDetailComponent, 
     resolve: { 
      project: ProjectDetailResolve 
     }, 
     children: [ 
      { path: '', redirectTo: 'overview', pathMatch: 'full' }, 
      { path: 'overview',   component: ProjectOverviewComponent }, 
      { path: 'documents',   component: DocumentsComponent }, 
      { path: 'logs',    component: LogsComponent }, 
     ] 
    } 
]); 

ProjectDetailComponent वर्तमान में उपयोग करके रिज़ॉल्वर (कोई समस्या नहीं देखते) के साथ सफलतापूर्वक परियोजना डेटा हो जाता है,:

ngOnInit() { 
    this.route.data.forEach((data: { project: any }) => { 
     this.project = data.project; 
    }); 
} 

लेकिन मुझे लगता है कि एक ही परियोजना में उत्तीर्ण होना बाल मार्गों के नीचे, क्योंकि उन मार्गों में से प्रत्येक के लिए एक और एपीआई कॉल ट्रिगर करने का अर्थ नहीं है।

मैंने बाल घटकों में उसी ngOnInit कोड का उपयोग करने का प्रयास किया है, यह सोचकर कि शायद कोणीय राउटर रूट डेटा भी पास करेगा, लेकिन कोई सफलता नहीं होगी।

कोई विचार कृपया?

धन्यवाद

उत्तर

16

आप माता-पिता रिसोल्वर से डेटा प्राप्त करने के लिए 'मार्ग' के 'माता-पिता की संपत्ति का उपयोग कर सकते हैं।

ngOnInit() { 
    this.route.parent.data.subscribe(data => { 
     this.project = data.project; 
    }); 
} 
+0

धन्यवाद, पूरी तरह से काम करता है! – yorch

+0

क्या यह मौजूदा संस्करण में भी संभव है: '' this.route.parent.snapshot.data ['mydata'] '' अगर मुझे सिंक्रोनस एक्सेस चाहिए? – Matt

4

कितनी दूर घटक पदानुक्रम द्वारा अपने संकल्प को वस्तु है आप parent संपत्ति से वहां पहुंच सकते हैं पर निर्भर।

उदाहरण:

ngOnInit() { 
    this.route.parent.data.subscribe(data => this.project = data.project); 
} 

या सदस्यता

ngOnInit() { 
    this.project = this.route.snapshot.parent.data['project']; 
} 

पी एस के बिना ध्यान रखें कि यदि आप एक स्तर से गहराई से घटक हैं, तो आप parent संपत्ति असीमित बार श्रृंखला कर सकते हैं। this.route.snapshot.parent.parent.data['project'] की तरह। चीयर्स!

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