2017-10-19 1 views
1

異なるURL接頭辞を持ついくつかのネストされたモジュールがあります。今私は接頭辞を指定せずに1つのモジュール内を移動したい(私のモジュールでは、どの接頭辞の下でモジュールにアクセスできるかを知りたくない)。サブモジュールに相対的な角度で移動する

これらは私のapp.moduleのルートです:

const APP_ROUTES: Routes = [ 
    { 
     path: '', 
     children: [ 
      { path: '', component: MainComponent }, 
      { path: 'nested', loadChildren: 'app/nested/nested.module#NestedModule' } 
     ] 
    } 
]; 

export const routing = RouterModule.forRoot(APP_ROUTES, { useHash: true }); 

は、これらは私のnested.moduleのルートです:

const APP_ROUTES: Routes = [ 
    { 
     path: '', 
     component: NestedComponent, 
     children: [ 
      { path: '', component: NestedSubComponent }, 
      { path: 'sub', component: NestedSubComponent }, 
      { path: 'sub/:id', component: NestedSubComponent } 
     ] 
    } 
]; 

export const routing = RouterModule.forChild(APP_ROUTES); 

は、今私は、ネストされた/#/から移動するため、たとえばたい/ subを/#/ nested/sub/123に設定します。どうすればこれを達成できますか?私は自分のサブモジュールにネストされている深さ(私のサブルートが//subか/ sub /:idの場合)を知っていますし、ネストされたプレフィックスを使いたくないのです。他のサブモジュールにも使用できます。

答えて

0

Router.navigate()メソッドの第2パラメータを使用してrelativeToオプションを指定すると、そのルートに対して相対的にナビゲートします。

constructor(private router: Router, 
      private activatedRoute: ActivatedRoute) {} 

goDeeper() { 
    this.router.navigate(['next-nested-route'], {relativeTo: this.activatedRoute}); 
} 

goBack() { 
    this.router.navigate(['../'], {relativeTo: this.activatedRoute}); 
} 

また、暗黙的に設定さActivatedRouteを持ってrouterLinkディレクティブを使用することができますそこに最初のスラッシュを入れないでください。角度のドキュメントでこれについてもっと

<a routerLink="/next">absolute</a> 
<a routerLink="next">relative next</a> 
<a routerLink="..">relative back</a> 

https://angular.io/guide/router#!#relative-navigation

+0

は、あなたの答えをいただき、ありがとうございます。私はrelativeToプロパティを使うことができることを知っていますが、私の入れ子レベル(私は知らない)によっては、別のパスを使う必要があります。たとえば、ActivatedRouteが "/"の場合は "sub/123"を使用し、 "/ sub"の場合は "/ 123"を使用します。だから私が欲しいのは、NestedComponentを基準にしたRouteです。 – Benedikt

+0

絶対パスが必要だと思います。 –

+0

これは、コンポーネント内で 'relativeTo'を使用して、その子ルートにナビゲートできることです。別のレベルのネストで同じコンポーネントを使用したい場合、唯一の方法は絶対パスを使用することです... –

関連する問題