我有一个 angular 应用程序,它包含多个逻辑视图(具有匹配的路由)。每个视图显示多个选项卡。根据活动选项卡,我确定要显示/隐藏 UI 的哪些部分。
由于选项卡不是路线的一部分,因此加载视图始终显示第一个选项卡。这在大多数情况下很好,但是当用户导航到另一个视图然后导航回(使用浏览器后退按钮)时,恢复以前选择的选项卡是有意义的。
任何想法如何在不向路线添加活动标签索引的情况下实现这一目标?
顺便说一句,我想避免将活动选项卡添加到路由的原因是:
我不希望将选项卡选择历史记录添加到浏览历史记录中(单击返回不应将您带到同一视图上的上一个选项卡,而是转到上一个视图)
我不希望控制器重新加载
到目前为止,我考虑使用本地存储来存储视图中的最后一个活动选项卡,并在检测到浏览器导航回来时恢复它。但这感觉就像一个黑客,所以我试图避免它。我正在寻找一种通过 angular 的做事方式感觉“正确”的解决方案......
任何想法表示赞赏!
最轻量级的“角度”方式可能是创建一个存储每个视图最后选择的选项卡的服务。这将无法在页面重新加载后继续存在。
为了在页面重新加载后继续存在,服务可以将数据存储在sessionStorage或中localStorage。
但是,复制粘贴 URL 时这仍然不起作用。在 URL 中存储选定的选项卡可以解决此问题。
您对在 URL 中存储所选选项卡的担忧是没有根据的。可以在 URL 内更新所选选项卡,而不会影响浏览器历史记录,也不会重新加载组件,例如:
onTabChange(event: MatTabChangeEvent) {
this.router.navigate([], { queryParams: { tab: event.index }, replaceUrl: true });
}
Run Code Online (Sandbox Code Playgroud)
最好通过“ariaLabbeledby”标记您的选项卡,然后使用它event.tab.ariaLabbeledby来避免重新排列选项卡时出现问题。
| 归档时间: |
|
| 查看次数: |
831 次 |
| 最近记录: |