2017-08-24 7 views
0

私はAngular4を使用しています。私はいくつかのBarComponentをapp.componentテンプレートに表示しています(ほぼすべてのページで、メニューバーのようです)。 BarComponentの子/子ではなく、別のコンポーネントに「所属する」ルータのパラメータを取得したいとします。 BarComponent内の角度メソッドを使用したIDのparam:
別のコンポーネントからルーターパラメータを取得する

/some-section-name/:id{here may be sub-routes} 

が、私はこれを取得することができます:たとえば
、私はルートを持っていますか?私はこの問題を何度も直面しなければならなかった

|- app.component 
    |- bar.component 
    |- (lazy load) some section 
     |- here is the component that has this :id param 

答えて

0

、それを解決するために、既に角度が提供するものを見つけられませんでした:
構造のようなものです。

だから私はrouteReader特別なサービスをした任意のルータまたはActivatedRouteを受けること、そして全体childrenツリーを探索する前に、それの.root.snapshotを取ります。

お手伝いがあります。

これはメインブランチだけを読み取る方法の1つです。ツリー全体を再帰的に読み取るように変更する必要はありません。

getParamsFromTop(route: ActivatedRouteSnapshot) { 
    let paramsMap = {}; 
    let routeCursor = route; 
    while (routeCursor) { 
     paramsMap = {...paramsMap, ...routeCursor.params}; 
     routeCursor = routeCursor.children[0]; 
    } 
    return paramsMap; 
    } 

EDIT 1:あなたはルートルートのスナップショットを置けば、このような何かが動作するはずです。

getParamsRecurse(route: ActivatedRouteSnapshot) { 
    let paramsMap = {...route.params}; 
    for (let i = 0; i < route.children.length; i++) { 
     paramsMap = {...paramsMap, ...this.getParamsRecurse(route.children[i])}; 
    } 
    return paramsMap; 
    } 
+0

興味深いオプションでは、ネストレベルは気にしません。悪い瞬間 - 再帰、アプリに子がたくさんある場合。しかし、とにかくありがとう、それは役に立ちます。 – WeekendMan

関連する問題