在Angular中导航时恢复活动选项卡

时间:2015-01-19 22:29:07

标签: angularjs

我有一个由多个逻辑视图组成的角度应用程序(具有匹配的路径)。每个视图显示多个选项卡。基于活动选项卡,我确定要显示/隐藏UI的哪些部分。

由于选项卡不是路径的一部分,因此加载视图始终显示第一个选项卡。这在大多数情况下都很好,但是当用户导航到另一个视图然后向后导航(使用浏览器后退按钮)时,恢复以前选择的选项卡是有意义的。

如果没有在路线中添加活动标签索引,如何实现这一目标?

BTW我希望避免在路线中添加活动标签的原因是:

  1. 我不希望将标签选择历史记录添加到浏览历史记录中(点击后面不应该转到同一视图上的上一个标签,而是前一个视图)

  2. 我不想让控制器重新加载

  3. 到目前为止,我考虑使用本地存储来存储视图中的最后一个活动选项卡,并在检测到浏览器导航回来时进行恢复。但这感觉就像一个黑客,所以我试图避免它。我正在寻找一种感觉正确的解决方案"通过棱角分明的做事方式......

    感谢任何想法!

1 个答案:

答案 0 :(得分:0)

最轻量级的“角度”方式可能是创建一个服务,该服务存储每个视图的最后选择的选项卡。这将无法重新加载页面。

为了避免页面重新加载,服务可以将数据存储在 sessionStoragelocalStorage 中。

但是,当复制粘贴 URL 时,这仍然不起作用。将选定的标签存储在 URL 中可以解决这个问题。

您对在 URL 中存储所选标签的担忧是没有根据的。可以在 URL 中更新选定的选项卡,而不会影响浏览器历史记录或重新加载组件,例如:

onTabChange(event: MatTabChangeEvent) {
    this.router.navigate([], { queryParams: { tab: event.index }, replaceUrl: true });
}

最好通过“ariaLabbeledby”标记您的标签,然后使用 event.tab.ariaLabbeledby 以避免重新排列标签时出现问题。