7

ルータからDataに基づいてrouterLinkを表示/非表示にしたい。Angular2 Router:ナビゲートせずにURLのルートを取得する

[ 
    { path: '', children: [ 
    { path: 'foo', children: [ 
     { path: 'bar', data: { requiredPermissions: ['a', 'b'] } } 
    ]} 
    ]}, 
    { path: 'baz', data: { requiredPermissions: ['c'] }, children: [ 
    { path: ':id' } 
    ]} 
] 

今私はRouterをお願いしたいと思います:ディレクティブは、私は、次のルータの設定(省略コンポーネント)を持っている...例えば

を行われているが、私は最も本質的な部分が欠落していますrouterLink/foo/barまたは/baz/123の場合に使用されるRouteの場合は、

私はRouterソースコード(https://github.com/angular/angular/blob/master/modules/%40angular/router/src/router.ts)を見ましたが、これを行う簡単な方法が見つかりませんでした。特にこれらの変数をどのように扱うか。

もちろん、Router.configを繰り返して深く深くすることができます。しかし、私はこれらの変数、正規表現などを解析する必要があります。角度ルータは内部的にこのすべてのことを行う必要があるため、より簡単な方法が必要です。

アイデアはありますか?解決策はありますか?

+0

Diはあなたが現在のルートからのデータが欲しいということ?取得するには、次のように行うことができますよりも、 –

答えて

0

必要なコードはここにあります:router/src/recognize.tsですが、私的な輸入が多いプライベートAPIなので、アプリで動作させるのは非常に難しいでしょう。

代わりにrouter.navigateByUrlを発射し、RouteRecognizedイベントを待ち、ナビゲーションをキャンセルすることができます(カスタムガードなど)。 RouteRecognizedにすべての必要な情報があります。明らかにそれは悪い解決策です。

もう1つの方法があります。パス+データを含む必要がある追加の構造(ある種のマップ)を作成することができます。たとえば、構造がパスstruct.baz-route={url:'baz/:id', perm: ['c']}、次に[routerLink]="struct.baz-route.url.replace(':id', x)"、次に*ngIf="struct.baz-url.perm.indexOf('c')>-1"を持ちます。あなたが現在のルートからのデータが必要な場合は

-1

ねえ、あなたは

import {ActivatedRoute} from '@angular/router'; 

export class Component { 

    constructor(private route: ActivatedRoute){ 
      let pathroots = this.route.pathFromRoot; 
      let pathurl = ''; 
      pathroots.forEach(path => { 

       path.url.subscribe(url => { 
        url.forEach(e => { 
         pathurl += e + '/'; 
        }); 
       }); 


     }); 
     console.log(pathurl,'*******************'); 
     } 

} 
関連する問題