Angular 重定向时路由到错误的路径

Angular Routing to the wrong path when redirected

Angular 8.2.14

所以我的 angular 路由有问题,这里是我的路由模块的代码:

  { 
    path: "hero", 
    component: HeroListComponent, 
    canActivate: [AuthGuard], 
    children: [
      { 
        path: "new", 
        component: NewHeroComponent
      },
      { 
        path: ":id", 
        component: HeroComponent, 
        canActivate: [HeroGuard]
      }
    ],
  },

我的问题是我在另一个网站上有一个按钮,可以将我重定向到我的 Angular 应用程序,当单击该按钮时,它会打开一个带有 url 的新选项卡,如下所示:

http://localhost:4200/hero/new?power=123&attr=123%20456%20789&city=123&rt=1&rate=80

当用户已经登录时,路由模块工作正常,将他正确地带到 NewHeroComponent 并正确处理查询的参数。

当用户未登录并且必须通过身份验证过程时会出现问题,通常重定向对其他组件没有任何问题,但对于某些组件在这种情况下,路由器尝试打开 HeroComponent 的原因。

当我在我的 HeroGuard 中记录 ActivatedRouteSnapshot 时(它不应该被调用但仍然被调用)我得到这个:

params:
  id: "new?power=123&attr=123%20456%20789&city=123&rt=1&rate=80"

重定向非常简单,当用户未登录时,link 保存在 localStorage 中,如果 localStorage 键用于我的重定向,则在用户登录后在我的主要组件中完成重定向使用 this.router.navigate([route]).

设置

预先感谢您的帮助!

经过更多的研究,我发现我使用了错误的功能来导航。

问题:?当 router.navigate([route]) 被调用时,url 被更改为 %3F,结果是 angular 认为它是一个参数。

解决方法:我把router.navigate([route])改成了router.navigateByUrl(route)!

希望这能帮助像我这样的新手! :)