angular - 如何延迟加载并激活带有子路由的模块
问题描述
当我想到使用登录视图来保护我的整个应用程序(使用警卫)并在用户想要导航 main.component(在本例中为planet.data)时强制用户登录时,我的想法就开始了。
所以我使用延迟加载(不相关)到planet.module 和canActivate 内planet-routing.module.ts 但之后我无法导航到planet-detail,因为路由无法匹配URL 段。
“我解决了”这个问题,将行星详细路线添加为“漫游者”的孩子。现在,当我将路由器插座放入行星数据中时,一切正常,直到我单击行星图像导航到该图像 ID。图像 ID 位于行星数据视图的正下方。我缺少什么?我想请您指出正确的方向。
// 行星数据.component.html
<div class="ui-g">
<div class="ui-g-12 ui-md-12">
<div class="ui-g-8">
<app-title *ngIf="pics"></app-title>
</div>
<div class="ui-g-4">
<app-dropdown-menu (selected)="onSelect($event)"></app-dropdown-menu>
</div>
</div>
<div class="ui-g-12">
<app-no-image class="margin" [cam]="true" [start]="true" *ngIf="!pics"></app-no-image>
</div>
<div>
</div>
<router-outlet></router-outlet>
<app-planet-view class="image" [pics]="pics"></app-planet-view>
</div>
<app-loader></app-loader>
// 行星细节.component.html
<div class="ui-g">
<app-image [picById]="picById"></app-image>
</div>
// 行星路由.module.ts
const planetRoutes: Routes = [
{
path: '',
component: PlanetDataComponent,
children: [
{
path: ':id',
component: PlanetDetailComponent,
canActivate: [AuthGuardService] },
],
canActivate: [AuthGuardService] },
];
@NgModule({
imports: [
RouterModule.forChild(planetRoutes)
],
exports: [RouterModule],
})
export class PlanetRoutingModule {}
// app.routing-module.ts
const routes: Routes = [
{ path: 'rovers', loadChildren: './planet/planet.module#PlanetModule' },
{ path: '', pathMatch: 'full', redirectTo: '/home' }
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
// app.component.html
<header><app-header></app-header></header>
<main>
<router-outlet></router-outlet>
</main>
<footer><app-footer></app-footer></footer>
解决方案
好吧,在一些帮助下,我可以解决这个问题,生成另一个组件并在子路由中声明它。父路由和第一个子路由都是 '',所以在父路由中我刚刚放了 router-outlet,它就是要显示子路由的那个。第一个子路由它将显示演示数据。
// 行星路由.module.ts
const planetRoutes: Routes = [
{
path: '',
component: PlanetComponent, -> Component generated to display child route
canActivate: [AuthGuardService],
children: [
{
path: '',
component: PlanetDataComponent
},
{
path: ':id',
component: PlanetDetailComponent
}
]
}
];
//planet.component.html
<router-outlet></router-outlet>
推荐阅读
- apache-camel - 如何模拟动态(toD)端点
- pyspark - 使用别名旋转和聚合 PySpark 数据框
- python - 将 sqlite 升级到 3.24+ pycharm
- javascript - d3:将鼠标悬停在文本中的单词上同时突出显示相应的条并使文本中的单词可点击
- python - WebDriver 按类名查找
- jsf - JSF 复合组件,多值字段
- excel - excel vba中的公共变量
- jax-rs - 大摇大摆的定义错误
- prolog - 如何在 GNU-Prolog 中运行这样的程序?
- sql-server - SSRS - 是否可以使用自定义 Excel 格式导出到 Excel 值?