2016-07-21 4 views
6

मैं एक मार्ग/abc/के रूप में परिभाषित किया है: आईडी/xyzकोणीय 2 v3 रूटर - कैसे बच्चे मार्ग में माता पिता के मार्ग पैरामीटर प्राप्त करने के लिए

कहाँ एबीसी /: आईडी एक Componenta को हल करता है और/xyz एक बच्चे घटक है राउटर-आउटलेट में प्रदर्शित किया गया है (घटक बी)

जब मैं/abc /: id/xyz पर जाता हूं, जब मैं ऐसा करता हूं। compout.params.subscribe (...) (जहां मार्ग एक सक्रिय मार्ग है) घटक में मैं देखता हूं आईडी। ComponentB में एक ही चीज़ करते समय मैं नहीं देखता: आईडी। मैं अनुमान लगा रहा हूं कि सक्रिय रूट यूआरएल सेगमेंट का उपयोग कर रहा है।

क्या मार्ग में सभी पैरामीटर प्राप्त करने के लिए वैसे भी है?

उत्तर

9

Untested नीचे है कि पद से प्रासंगिक अनुभाग रेखांकित किया है, लेकिन Savkin's blog के अनुसार, बच्चे में निम्नलिखित डाल माता पिता घटक के रूटर पैरामीटर प्राप्त करने के लिए:

constructor(activatedRoute: ActivatedRoute, router: Router) { 
    const parentActivatedRoute = router.routerState.parent(activatedRoute); 
    this.id = parentActivatedRoute.params.map(routeParams => routeParams.id); 
} 

है कि कोड की तुलना करना Router guide में क्या है, आपको अपने टेम्पलेट में id के साथ AsyncPipe का उपयोग करने की आवश्यकता होगी, या आप subscribe() का उपयोग कर सकते हैं ... या आप snapshot का उपयोग कर सकते हैं यदि आपको यकीन है कि आईडी मान नहीं बदलेगा:

this.id = parentActivatedRoute.snapshot.params['id']; 

@Chris नीचे एक टिप्पणी में उल्लेख है: this.router.routerState.pathFromRoot(this.route) वर्तमान मार्ग के लिए नीचे सक्रिय मार्गों की एक सरणी वापस आ जाएगी। फिर आप सभी सक्रिय मार्गों के पैरामीटर प्राप्त कर सकते हैं।

अद्यतन: RouterState.pathFromRoot(someRoute)deprecated in master चिह्नित किया गया है। आरसी 5 में, ActivatedRoute.pathFromRoot() का उपयोग करें।

+0

धन्यवाद मार्क, मैं इस काम की पुष्टि कर सकता हूं। दुर्भाग्य से यह दृष्टिकोण आपको केवल मूल मार्ग से पैरामीटर प्राप्त करने देगा। स्पष्ट रूप से अपनी स्वयं की सेवा के बिना दादाजी से प्राप्त करने का कोई तरीका नहीं है। – Chris

+0

@ क्रिस, मुझे लगता है कि आप दादाजी सक्रिय मार्ग और इसके पैरामीटर प्राप्त करने के लिए 'राउटर.उटरटेरेट.एरेंट (पैरेंट एक्टिवेटेड रूट) 'कह सकते हैं, और इसी तरह के कोड को आगे जाने के लिए - यानी," राउटर स्टेट " पेड़ "। –

+0

हां, लेकिन आप parentActivatedRoute कैसे प्राप्त करते हैं? एकमात्र चीज जिसे मैं जानता हूं कि आप इंजेक्ट कर सकते हैं वह वर्तमान सक्रिय मार्ग है। मुझे parentActivatedRoute का लिंक नहीं दिखाई देता है। मैंने जो खोजा वह यह है कि आप 'this.router.routerState.pathFromRoot (this.route)' कर सकते हैं। यह सक्रिय मार्गों की एक सरणी को वर्तमान मार्ग तक वापस कर देगा। – Chris

0

माता-पिता मार्ग परम डिफ़ॉल्ट रूप से बच्चे को पास नहीं किया जाता है लेकिन आप उन्हें बाल घटक के अंदर मूल मार्ग से एक्सेस कर सकते हैं। @ मार्क राजकोक ने आपको great post की ओर इशारा किया। मैं

@Component({ 
     selector: 'team', 
     template: ` 
     Team Id: {{id | async}} 
     <router-outlet></router-outlet> 
     ` 
    }) 
    class TeamCmp { 
     id:Observable<string>; 
     constructor(r: ActivatedRoute) { 
     this.id = r.params.map(r => r.id); 
     } 
    } 

    @Component({ 
     selector: 'details', 
     template: ` 
     Details for Team Id: {{teamId | async}} 
     ` 
    }) 
    class DetailsCmp { 
     teamId:Observable<string>; 
     constructor(r: ActivatedRoute, router: Router) { 
//get parent activated route. 
     const teamActivatedRoute = router.routerState.parent(r); 
     this.teamId = teamActivatedRoute.params.map(r => r.id); 
     } 
    } 
7

Mark's answer पर नजर रखने के लिए इस विधि कि कोणीय 2 के अंतिम संस्करण में काम करता है लगता है:

constructor(route: ActivatedRoute) { 
    let id = route.pathFromRoot[route.pathFromRoot.length - 1].snapshot.params["id"]; 
} 

अद्यतन: माता-पिता मार्ग स्नैपशॉट के लिए सीधी पहुँच here से:

constructor(route: ActivatedRoute) { 
    let id = route.snapshot.parent.params['id']; 
} 

अन्य विकल्पों के लिए Angular 2: getting RouteParams from parent component भी देखें।

+0

नोट, यह 'path.pathFromRoot.length - 2' और' -1' नहीं होना चाहिए, क्योंकि '-1' वर्तमान मार्ग देगा –

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