Angular 8.2.14
我的Angular路由出现了问题,以下是我的路由模块的代码。
{
path: "hero",
component: HeroListComponent,
canActivate: [AuthGuard],
children: [
{
path: "new",
component: NewHeroComponent
},
{
path: ":id",
component: HeroComponent,
canActivate: [HeroGuard]
}
],
},
我的问题是,我在另一个网站上有一个按钮,它将我重定向到我的Angular应用,当按钮被点击时,它打开了一个新的标签页,网址是这样的:
http:/localhost:4200heronew?power=123&attr=123%20456%20789&city=123&rt=1&rate=80。
当用户已经登录时,路由模块工作正常,并将他带到NewHeroComponent,并正确处理查询的参数。
当用户没有登录时,问题就会发生。 中,并且必须通过验证过程,通常重定向对其他组件来说是没有任何问题的,但在这种情况下,由于某些原因,路由器试图打开Hero组件。
当我在HeroGuard中记录ActivatedRouteSnapshot时(它不应该被调用,但仍然被调用),我得到了这个。
params:
id: "new?power=123&attr=123%20456%20789&city=123&rt=1&rate=80"
重定向很简单,当用户没有登录时,链接会被保存在本地存储中,而当用户登录后,重定向会在我的主组件中完成,如果我的重定向的本地存储键是通过使用 This.router.navigate([route]).
先谢谢你的帮助!
经过更多的研究,我发现我使用了错误的函数来导航。
问题是:当调用router.navigate([route])时,url中的?被改成了%3F,结果是angular认为这是一个参数。
解决方法是 我把router.navigate([route])改成了router.navigateByUrl(route)!
希望这能帮到像我这样的新手!:)