【问题标题】:Default route parameter Angular2: Nested routing默认路由参数Angular2:嵌套路由
【发布时间】:2016-08-21 18:03:48
【问题描述】:

我正在尝试在 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 参数,所以当我们重定向到这个路由时,它期望一些值。

问题

问题是:有没有办法为路由参数设置默认值。因为我的链接导致的错误未包含所需的路由参数。

例外:“id”的路由生成器未包含在传递的参数中。在 [['Archives'] in AppComponent@18:23]

感谢您的帮助!

【问题讨论】:

  • 你在说什么重定向?重定向到Git,但错误来自Archive。什么操作会产生此错误?
  • Archives 路由产生的错误,不要关注其他路由,它们按预期工作。问题出在archives-&gt;archive 路由中。

标签: angular angular2-routing


【解决方案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'));
      }
  }

【讨论】:

  • 您回答的第二点工作正常,但我坚持知道不同的问题。首先,也许您知道如何从ts 代码中而不是从视图中执行此类默认值。第二个问题,我无法在 Component 构造函数中捕获这个值,它返回一个空对象。
  • 您是如何尝试传递 id 的,它是静态的还是动态的?如果它是静态的,而不是恰好代替 :id 如果它不是 url 的一部分,请在路由配置的第三个参数中定义它,就像 gunter 在他的回答中建议的那样,如果它是动态的并且是 url 的一部分,那么这就是方式去。
  • id 将是动态的,但要知道,即使它是静态的,我也无法捕捉到它。我尝试了您的答案示例,错误消失了。但是子组件中的 routeparams 是空的。
  • Git commit with changes 这是我的示例项目的 repo,谢谢你的帮助!
  • 你为我提供的那条新行返回null
猜你喜欢
  • 2020-06-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多