首页 > 解决方案 > 试图对父母施加保护,但对孩子没有

问题描述

我正在尝试应用 Guard 来访问我的列表路径,但是激活路由的登录名是它的子节点,是否可以使用警卫来阻止访问父节点而不是子节点?

const routes: Routes = [
  {path: "", component: TirageComponent},
  {path: "tirage", redirectTo: ""},
  {path: "historique", component: HistoriqueComponent},
  {path: "liste", component: ListeComponent, canActivate: [AuthGuard] ,children: [
    {path: "login", component: AuthComponent}
  ]},
  {path: "**", redirectTo: "tirage"}, 
];

这是我的路由代码,每当我尝试访问 /liste/login 时,它都不会让我访问它,所以我无法访问登录名和登录后应该可以访问的页面

标签: angularangular2-routing

解决方案


如果我没记错的话,访问子路由的唯一方法是通过父路由。如果您要禁用父路由,您将无法访问子路由。

在我看来,您有两种选择:

  • 切换 liste 和 login 路由并在新的子路由上使用警卫。这样您就可以随时访问登录屏幕,从而保护列表。这会有点搞砸你的路线。你会得到类似 domain.com/login/liste 的东西,但显然你可以稍微改变一下命名。

  • 您也可以完全拆分路线,这将为您提供两条单独的路线。您可以随时访问的登录名和可以使用路由守卫保护的列表名。这是我建议的选项。

      const routes: Routes = [
        {path: "", component: TirageComponent},
        {path: "tirage", redirectTo: ""},
        {path: "historique", component: HistoriqueComponent},
        {path: "liste", component: ListeComponent, canActivate:[AuthGuard]},
        {path: "login", component: AuthComponent}
        {path: "**", redirectTo: "tirage"}, 
      ];
    

    希望这个见解有所帮助!


推荐阅读