在相同 router-outlet 中加载嵌套路由
Load nested routes in same router-outlet
我有一个 Angular 4 应用程序和我的 private.component.html
是这样的:
<app-breadcrumb></app-breadcrumb>
<router-outlet></router-outlet>
还有我的路由:
const privateRoutes: Routes = [
{
path: '',
component: PrivateComponent,
children: [
{
path: 'dashboard',
component: DashboardComponent
},
{
path: 'settings',
component: SettingsComponent
},
{
path: 'companies',
component: CompaniesComponent,
children: [
{
path: 'add',
component: FormCompanyComponent
},
{
path: ':id',
component: CompanyComponent
}
]
}
]
}
];
第一层的所有组件在 router-outlet 中呈现 PrivateComponent
。但我希望(如果可能的话)所有其他 child (并且我可以有多个级别),如 /companies/add
或 /companies/20
仍然呈现在相同的 router-outlet 我的私有模板。我的实际代码,当然,期望我在 companies.component.html
.
内有插座
这对于实现我的 breadcrumb 组件和编写 "Home > Companies > Apple Inc." 很重要。
可以创建这样的结构吗?
如果您将 companies
设为无组件路由,/companies/add
或 /companies/20
路由仍会在第一个路由器出口内呈现。
这意味着您必须省略该路由的组件定义,它看起来像这样:
//...
{
path: 'companies',
children: [
{
path: 'add',
component: FormCompanyComponent
},
{
path: ':id',
component: CompanyComponent
}
]
}
更新
{
path: 'companies',
component: CompaniesComponent
},
{
path: 'companies/add',
component: FormCompanyComponent
},
{
path: 'companies/:id',
component: CompanyComponent
}
但在我看来这有点令人讨厌
添加到@Karsten 的回答,基本上你想要的是有一个无组件路由和空路径作为默认组件,例如:
const privateRoutes: Routes = [
path: 'companies',
data: {
breadcrumb: 'Companies'
}
children: [{
path: '', //url: ...companies
component: CompaniesComponent,
} {
path: 'add', //url: ...companies/add
component: FormCompanyComponent,
data: {
breadcrumb: 'Add Company' //This will be "Companies > Add Company"
}
}, {
path: ':id', //url: ...companies/5
component: CompanyComponent
data: {
breadcrumb: 'Company Details' //This will be "Companies > Company Details"
}
}
]
];
您需要动态修改面包屑以将 "Company Details" 更改为实际公司名称。
我有一个 Angular 4 应用程序和我的 private.component.html
是这样的:
<app-breadcrumb></app-breadcrumb>
<router-outlet></router-outlet>
还有我的路由:
const privateRoutes: Routes = [
{
path: '',
component: PrivateComponent,
children: [
{
path: 'dashboard',
component: DashboardComponent
},
{
path: 'settings',
component: SettingsComponent
},
{
path: 'companies',
component: CompaniesComponent,
children: [
{
path: 'add',
component: FormCompanyComponent
},
{
path: ':id',
component: CompanyComponent
}
]
}
]
}
];
第一层的所有组件在 router-outlet 中呈现 PrivateComponent
。但我希望(如果可能的话)所有其他 child (并且我可以有多个级别),如 /companies/add
或 /companies/20
仍然呈现在相同的 router-outlet 我的私有模板。我的实际代码,当然,期望我在 companies.component.html
.
这对于实现我的 breadcrumb 组件和编写 "Home > Companies > Apple Inc." 很重要。
可以创建这样的结构吗?
如果您将 companies
设为无组件路由,/companies/add
或 /companies/20
路由仍会在第一个路由器出口内呈现。
这意味着您必须省略该路由的组件定义,它看起来像这样:
//...
{
path: 'companies',
children: [
{
path: 'add',
component: FormCompanyComponent
},
{
path: ':id',
component: CompanyComponent
}
]
}
更新
{
path: 'companies',
component: CompaniesComponent
},
{
path: 'companies/add',
component: FormCompanyComponent
},
{
path: 'companies/:id',
component: CompanyComponent
}
但在我看来这有点令人讨厌
添加到@Karsten 的回答,基本上你想要的是有一个无组件路由和空路径作为默认组件,例如:
const privateRoutes: Routes = [
path: 'companies',
data: {
breadcrumb: 'Companies'
}
children: [{
path: '', //url: ...companies
component: CompaniesComponent,
} {
path: 'add', //url: ...companies/add
component: FormCompanyComponent,
data: {
breadcrumb: 'Add Company' //This will be "Companies > Add Company"
}
}, {
path: ':id', //url: ...companies/5
component: CompanyComponent
data: {
breadcrumb: 'Company Details' //This will be "Companies > Company Details"
}
}
]
];
您需要动态修改面包屑以将 "Company Details" 更改为实际公司名称。