网站搜索

typescript - Angular 7 重定向到上次访问的页面


我正在构建一个 Angular 应用程序,我希望在用户登录后将他重定向到他最后访问的页面。我的想法是,如果用户已登录,我会从本地存储中获取最后访问的页面(每次导航时都会更新),然后重定向到该页面。如果用户未登录,则跳转到登录页面。

为此,我一直在尝试寻找完成此事的最佳方法,因为我认为有几种选择。

1- 使用应用程序初始化程序。想法是定义一个函数,我可以在应用程序初始化时执行它,以检测重定向到哪里。问题是,由于此时路由器尚未创建,我无法注入路由器,因此会出现错误。另一种方法是使用 Injector 类生成一个路由器实例,然后从那里进行重定向。这似乎有些不干净。

2- 使用路由解析器。虽然这看起来更像是准备数据以便随后显示,但在这里我可以定义导航到基础路径 '' 时的功能。起初这工作得很好,但如果我点击返回按钮回到主仪表盘页面(假设我们在访问网站时被重定向到 '/dash/msgs',然后我们想回到路径 '/dash/main'),解析器会再次执行,存储的导航还没有更新(这是在导航结束事件的服务中发生的),所以检索到的是旧值,并且 RouterStateSnapshot 的 state.url 显示我的是主路径 '/' 而不是最终路径 '/dash/main'。因此我总是停留在同一页——当我没有登录访问,然后登录并在同一个浏览器窗口开始导航时,这种情况不会发生。

3- 使用一个可以激活的守卫。这在我看来也不是正确的地方。我为我的主仪表盘模块(路径 '/dash')定义了一个守卫,这个守卫在从新浏览器窗口访问且用户已登录时总会被执行。这个守卫会在一个用于检测用户是否已登录的第一个守卫之后执行,但如果本地存储中有某个导航 URL,这个守卫将返回 false 并重定向到那个 URL,而在大多数情况下都会发生这种情况。这种方法可以正常工作,但有一些延迟,而且在我看来不是正确的方法,因为我希望能在更早的阶段就检测到导航位置。

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