Angular2 - 名为router-outlet不会导航到具有子路由的组件

时间:2017-02-28 14:48:02

标签: angular angular2-routing router-outlet

我有一个带按钮的父组件,其功能是在里面显示子组件。我使用命名的router-outlet导航到孩子。 我的尝试基于以下示例:https://github.com/vsavkin/router_mailapp(显示'compose'的弹出窗口)

路由

...
{
    path: 'commissions-module/agents/:agentId/extra-commissions',
    component: ExtraCommissionsComponent,
    children: [{
        path: 'regeneration-parameters',
        component: RegenerationParametersComponent,
        outlet: 'parameters'
    }]
}
...

如您所见,父组件的路径包含变量段(agentId),因此我不能使用绝对路径路由。父模块和子组件都将导入模块文件中。

HTML模板:

<button (click)="displaySubcomponent()">Show</button>
<router-outlet name="parameters"></router-outlet>

显示方法

displaySubcomponent() {
     this.router.navigate(['/', {outlets: {parameters: ['regeneration-parameters']}}])
}

按下按钮后,页面以

响应
EXCEPTION: Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'regeneration-parameters'

当程序尝试导航到新网址时,会将其创建为:

.../commissions-module/agents/1000555/extra-commissions(parameters:regeneration-parameters)

我需要的是获取以下网址,因为再生参数额外佣金的孩子:

.../commissions-module/agents/1000555/extra-commissions/(parameters:regeneration-parameters)

有趣的是,当我将第二个url插入地址栏时效果很好,子组件显示在其父组件内 - 问题是在router.navigate()函数创建的url中的括号之前缺少斜杠(“/”)

示例中的相同内容效果很好,所以我发现的类似问题的其他解决方案是否有隐藏的东西我看不到? 感谢

1 个答案:

答案 0 :(得分:4)

解决方案非常隐蔽,因为在使用单个路由器插座时,通常使用默认的一个而不是命名的一个。关键是,即使我们想在应用程序中使用单个命名插座,也需要一个默认(未命名)插座。模板看起来像:

<button [routerLink]="['./', {outlets: {parameters: 'regeneration-parameters'}}]">
    Show
</button>

<router-outlet></router-outlet>
<router-outlet name="parameters"></router-outlet>