2

我正在构建一个 Angular 应用程序,我想在其中将用户重定向到他登录后上次访问的页面。这个想法是,如果您已登录,我将从本地存储中获取上次访问的页面(将在每次导航时更新)并将重定向到那里。如果您未登录,则转到登录页面。

为此,我一直在努力寻找实现这一目标的最佳方法,因为我相信有几种选择。

1-使用应用初始化程序。想法是定义一个我可以设置为在初始化应用程序时执行的函数,以检测重定向到的位置。问题是我得到了一个错误,因为我可以在此时注入路由器,因为它还没有被创建。另一种方法是使用 Injector 类生成一个 Router 实例并从那里重定向。这似乎相当肮脏。

2-使用路由解析器。尽管这似乎更像是准备随后将显示的数据,但在这里我可以定义导航到基本路径时的功能''。起初这很好用,但是如果我点击返回按钮到主仪表板页面(假设我们在访问该站点时被重定向到“/dash/msgs”,然后我们想返回到路径“/dash/main” ) 然后再次执行解析器,存储的导航尚未更新(这发生在导航结束事件的服务上),因此正在检索旧值,并且来自 RouterStateSnapshot 的 state.url 向我显示主路径'/'而不是结束路径'/dash/main'。所以我最终总是在同一个页面上 - 当我在没有登录的情况下访问然后我登录并开始使用同一个浏览器窗口导航时,情况并非如此

3-使用带有罐子的守卫激活。这对我来说似乎也不是正确的地方。我为我的主仪表板模块(路径'/dash')定义了一个保护,当从新的浏览器窗口访问并且用户登录时,它将始终执行。这将在第一个保护检测到您确实已登录之后发生in,但是如果本地存储中有一些导航 url 并重定向到那里,那么这个守卫将返回 false,这在大多数情况下都是如此。这种方法效果很好,但它有一些延迟,对我来说似乎不是正确的方法,因为我希望在早期阶段检测到导航的位置

有人可以指出我处理这个问题的正确策略吗?提前致谢!

4

0 回答 0