【发布时间】:2022-08-17 03:15:41
【问题描述】:
我们目前正在开发一个 Angular 13 应用程序,该应用程序分为几个独立的模块,由不同的团队维护,每个模块代表由其自己的微服务支持的不同应用程序的 UI。 这些模块可以依赖于我们的“SharedModule”,但不能反过来。
现在,我们要实现一个“帮助中心”,它由一个浮动在右下角的问号按钮组成,如果单击它会为当前加载的页面提供帮助。问题是,我们希望将每个模块的帮助中心页面的内容保留在该模块中,此外,有些模块不需要帮助中心页面。
我们当前的解决方案在我们的主布局中添加了一个组件:
<router-outlet name=\"navbar\"></router-outlet>
<router-outlet></router-outlet>
<app-help></app-help>
<router-outlet name=\"footer\"></router-outlet>
app-help 组件表示浮动按钮,
<button mat-fab (click)=\"openHelpCenter()\">
<mat-icon>help</mat-icon>
</button>
打开一个材质对话框,里面有一个名为router-outlet:
@Component({
selector: \'app-help\',
templateUrl: \'./help.component.html\',
styleUrls: [\'./help.component.scss\']
})
export class HelpComponent {
constructor(
private dialog: MatDialog,
) {
}
openHelpCenter() {
this.dialog.open(HelpDialogComponent, {
width: \'300px\'
})
}
}
@Component({
selector: \'app-help-dialog\',
template: \'<router-outlet name=\"help\"></router-outlet>\'
})
export class HelpDialogComponent {
constructor() {
}
}
在每个模块中,团队现在可以实现使用命名router-outlet 的路由:
...
{
path: \'\',
component: HelpComponent,
outlet: \'help\'
}
...
根据当前加载的 url “注入” Dialog 内的模块 HelpComponent。
这工作得很好,但是,我们有一个悬而未决的问题:
如果路由器插座为空,即如果您位于不提供帮助的页面上,我们如何隐藏浮动按钮?
我相信最简单的解决方案(即在模块内用最少的代码管理东西的解决方案)是在HelpComponent 中监听路由器事件,例如NavigationEnd,然后找出“帮助”-router-outlet 是否存在“活动”路由并相应地设置可见性。 (类似于RouterLinkActive-指令)
但是,我无法找到如何从Router-Framework 检索此信息。
当然,我也很欣赏有关如何以不同方式解决问题的想法。
标签: angular angular-router angular-router-events