【发布时间】:2019-01-21 15:09:13
【问题描述】:
我将提供很多背景知识(也许没有必要),因为我真的不知道如何问这个问题。
我有一个带有路由的 Angular 资产跟踪应用程序,它有一些父路由和几个子路由。子路由都指定父组件并激活该组件内的不同组件(参见代码)。
父组件会生成一个树,其中包含多个路由链接,这些链接指向按位置和类型分组的各种资产的详细信息页面,用户在此树中导航以选择资产。但是,当路由器链接被激活时,它会重新加载父组件,然后是树,现在用户留在起点,必须重新打开树。
我正在尝试确定我是否错误地构建了组件关系,或者我是否从错误的角度进入了这个工作流程。
本质上,我想要实现的是,当用户导航到父组件中的不同位置时,树结构保持不变。无论是详情页、仪表板等。
如何防止每次激活和停用子路由器链接时重新加载父组件?
app-routing.module.ts 代码:
{
path: 'assets',
canActivate: [ AuthGuard],
children: [
{
path: '',
component: AssetsComponent,
},
{
path: 'details/:asset',
component: AssetsComponent
},
]
},
asset.component.ts 代码:
<div>
<div class="select-pane">
...
<div class="asset-list-item lvl-3" routerLink="/assets/details/{{ assetList?.hostname }}" routerLinkActive="selected">{{ assetList?.hostname }}</div>
...
</div>
</div>
<div class="dialog-pane">
<app-asset-dashboard *ngIf="!currentAsset"></app-asset-dashboard>
<app-asset-detail *ngIf="currentAsset" [asset]="currentAsset">
【问题讨论】:
-
我从问题的理解是,
AssetComponent正在处理树的显示和细节。在这种情况下,导航到/details后,组件正在重新加载。我的建议是,将详细信息放在一个单独的组件中,比如AssetDetailsComponent并让它呈现在AssetComponent内的<router-outlet>中 -
是的,AssetComponent 显示一棵树,然后我还有另外两个组件,AssetDetailsComponent 和 AssetDashboardComponent。导航到 /details/'some-asset' 会重新加载不需要的整个 AssetComponent。那么我会把
<router-outlet>放在 AssetComponent 中吗?