2016-04-27 96 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