angular - 试图对父母施加保护,但对孩子没有
问题描述
我正在尝试应用 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 时,它都不会让我访问它,所以我无法访问登录名和登录后应该可以访问的页面
解决方案
如果我没记错的话,访问子路由的唯一方法是通过父路由。如果您要禁用父路由,您将无法访问子路由。
在我看来,您有两种选择:
切换 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"}, ];
希望这个见解有所帮助!
推荐阅读
- javascript - Angular中选择框的默认“占位符”?
- bash - 为什么 `($(hostname -I))` 会扩展到 IP 列表的第一个单词?
- php - 如何在 PhpWord 中使标题居中并遮蔽包含它的完整行
- angular - 在 UI 中进行预填日期输入
- javascript - 两个单声道音频流,一个在右扬声器上并行播放另一个在左扬声器上
- netlify - 为什么 YARN_FLAGS 被忽略?
- swift - 使用 Firebase 的 Swift 完成处理程序
- reactjs - 带有下一个路由器的默认布局(页眉、页脚)
- python - 在 TestCases 中的 setUp 或 setUpClass 中修补装饰器不起作用
- html - R从网络中提取表格,没有