【发布时间】:2018-06-25 06:24:41
【问题描述】:
给定以下模块,我如何创建路由,以便当应用程序加载此模块时,它将路由到 CComponent 并在命名路由器出口 search-results 中加载 AComponent
app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { AComponent } from './a.component';
import { BComponent } from './b.component';
import { CComponent } from './c.component';
@NgModule({
declarations: [
AComponent,
BComponent,
CComponent
],
imports: [
BrowserModule,
RouterModule.forRoot([
{
path: '',
pathMatch: 'prefix',
component: CComponent,
children: [
{
path: 'a',
component: AComponent,
outlet: 'search-results'
},
{
path: 'b',
component: BComponent,
outlet: 'search-results'
}
]
])
],
providers: [],
bootstrap: [CComponent]
})
export class AppModule {}
a.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'a-component',
template: `
<div class="tabs row">
<h3 [routerLink]="[{ outlets: { 'search-results': ['a'] } }]" class="tab" routerLinkActive="active">
A
</h3>
<h3 [routerLink]="[{ outlets: { 'search-results': ['b'] } }]" class="tab" routerLinkActive="active">
B
</h3>
</div>
<router-outlet name="search-results"></router-outlet>
`
})
export class AComponent {
}
我在路线上尝试了许多不同的东西:
通过上述配置,页面加载,但AComponent 没有加载到屏幕上。
如果我将CComponent 更新为具有以下内容:
export class CComponent {
constructor(
private route: ActivatedRoute,
private router: Router
) {
router.navigate(
[
{
outlets: {
'search-results': ['a']
}
}
], { relativeTo: route });
}
}
然后似乎一切正常,但必须在父元素的构造函数中触发导航似乎是错误的。
如果我更新子路由并将{ path: 'a', component: AComponent, outlet: 'search-results' } 替换为{ path: '', component: AComponent, outlet: 'search-results' },路由器似乎会在插座中正确加载该组件,但routerLinkActive 指令似乎不像active 类那样生效未添加到第一个 h3 并且将 routerLink 更新为 outlets: { 'search-results': ['a'] } 不允许导航到 BComponent 后导航回 AComponent。
我在上面尝试了许多变体,但都没有成功。
有没有办法配置路由,以便默认路由将在未命名的router-outlet 和命名search-results 路由器出口中的AComponent 中加载CComponent?
【问题讨论】:
标签: angular angular-routing angular-router angular-router-loader