我正在构建一个Angular应用程序,我想在其中将用户重定向到他登录后访问的上次访问页面。这个想法是,如果您登录,我将从本地存储中获取最后访问的页面(该页面将在每次导航中更新),并将在那里重定向。如果您尚未登录,请转到登录页面。
为此,我一直在尝试找到实现此目的的最佳方法,因为我相信有很多选择。
1-使用App初始化程序。想法是定义一个可以设置为初始化应用程序以检测重定向到的位置的函数。问题在于,由于尚未创建路由器,因此我可以在此时注入路由器,因此出现错误。一种替代方法是使用Injector类生成一个Router实例,然后从那里重定向。这似乎很脏。
2-使用路由解析器。尽管这样做似乎更多是为了准备随后将要显示的数据,但在这里我可以在导航到基本路径''时定义功能。最初效果很好,但是如果我在主仪表板页面上单击后退按钮(假设访问网站时我们被重定向到了“ / dash / msgs”,那么我们想回到路径“ / dash / main” ),然后再次执行解析器,所存储的导航尚未更新(发生在导航结束事件的服务上),因此正在检索旧值,并且RouterStateSnapshot的state.url向我显示了主路径“ /”而不是结束路径“ / dash / main”。因此,我总是总是停留在同一页面上-在没有登录但没有登录然后访问并使用相同的浏览器窗口进行导航的情况下,情况并非如此
3-将防护罩与罐一起使用会激活。在我看来,这也不是正确的地方。我为我的主仪表板模块(用于路径“ /破折号”)定义了一个防护措施,当从新的浏览器窗口进行访问并且用户登录时,该防护措施将始终执行。这将在第一个防护措施检测到您确实登录后发生输入,但是如果本地存储上有一些导航URL,则此防护将返回false并重定向到大多数情况下。这种方法效果很好,但存在一些延迟,对我来说似乎不是正确的方法,因为我希望可以在较早的阶段检测到要导航的位置
有人可以指出我适当的策略来解决这个问题吗?预先感谢!