2016-04-27 93 views
1

我想在Angular2中創建嵌套路由。默認路由參數Angular2:嵌套路由

這裏是我的組件的代碼: app.partial.html

<nav class="navbar navbar-default"> 
<div class="container-fluid"> 
    <!-- Brand and toggle get grouped for better mobile display --> 
    <div class="navbar-header"> 
     <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"> 
      <span class="sr-only">Toggle navigation</span> 
      <span class="icon-bar"></span> 
      <span class="icon-bar"></span> 
      <span class="icon-bar"></span> 
     </button> 
     <a class="navbar-brand" href="#">Brand</a> 
    </div> 

    <!-- Collect the nav links, forms, and other content for toggling --> 
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> 
     <ul class="nav navbar-nav"> 
      <li><a [routerLink]="['Git']">Git Cmp</a></li> 
      <li><a [routerLink]="['Courses']">Courses Cmp</a></li> 
      <li><a [routerLink]="['Archives']">Archives Cmp</a></li> 
     </ul> 
    </div> 
</div> 

這裏是我的主要觀點,在我所包含[routerLink]=['Archieves']鏈接到子組件與它是自己的路由。

app.component.ts

@RouteConfig([ 
    { path: '/git', name: 'Git', component: GitComponent }, 
    { path: '/courses', name: 'Courses', component: CoursesComponent, useAsDefault: true }, 
    { path: '/archives/...', name: 'Archives', component: ArchivesComponent }, 
    { path: '/*other', name: 'Other', redirectTo: ['Git'] } 
]) 

這裏是父組件的路由配置,其中包括/archives/...路線預計其子路由。

archives.component.ts

@RouteConfig([ 
    { path: '/:id', name: 'Archive', component: ArchiveComponent, useAsDefault: true } 
]) 

你可以看到路由子組件的配置上面。正如你所看到的,它有id參數,所以當我們重定向到這條路線時,它會期望一些價值。

問題

的問題是:有沒有一種方法來設置路線PARAM默認值。因爲我有一個由我的鏈接引起的錯誤,它不包含所需的路由參數。

例外:'id'的路由生成器未包含在傳遞的參數中。在[['Archives] in AppComponent @ 18:23]

謝謝你的幫助!

+0

你在談論什麼重定向?重定向到'Git',但錯誤來自'Archive'。什麼操作產生這個錯誤? –

+0

由'Archives'路由產生的錯誤,不關注其他路由,它們按預期工作。問題出現在'archives-> archive'路徑中。 – Mikki

回答

1
[routerLink]="['Archives']" 

應該

[routerLink]="['Archives/Archive', {id: 'someId'}]" 

[routerLink]="['Archives', {id: 'someId'}]" 

可以正常工作。我不知道


更新

您可以在ArchiveComponent得到routeParams(因爲這是它通過路由器路由到)如下圖所示,而不是在ArchivesComponent

export class ArchiveComponent { 
     date: string; 
     constructor(private routeParams: RouteParams) { 

     console.log(this.routeParams.get('id')); 
     } 
    } 
+0

你答案的第二點工作正常,但我堅持瞭解不同的問題。首先,也許你知道如何從'ts'代碼中做這樣的默認值,而不是從視圖中。第二個問題,我不能在Component構造函數中捕獲這個值,它返回一個空對象。 – Mikki

+0

你如何通過'id',它是靜態的還是動態的?如果它是靜態的而不是':id',如果它不是url的一部分,則在route config的第三個參數中定義它,就像在他的回答中提到的gunter一樣,如果它是動態的並且是url的一部分,要走的路。 –

+0

id將是動態的,但要知道,即使它是靜態的,我也無法捕捉它。我嘗試了你的答案示例,並且錯誤消失了。但子組件中的routeparams是空的。 – Mikki