【发布时间】:2021-08-18 21:03:10
【问题描述】:
我实际上有多个守卫,它们共享从我的 API 调用的完全相同的数据。
我的守卫是这样的:
export class GuardBlockAgent implements CanActivateChild {
...
canActivateChild(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<boolean> | boolean {
return this.userService.retrieveMyUser(null, environment.liveMode).map(
...
)}
我正在寻找一种方法来在我的警卫之间共享我的数据。而不是多次调用相同的数据。
在this post 中,他们将这种方式与canActivate 一起使用
{ path: 'super-user-stuff', component: SuperUserStuffComponent, canActivate: RoleGuard, data: {roles: ['SuperAdmin', ...]} }
但是如何传递来自我的 API 的动态数据?
theme-routing.module.ts
const routes: Routes = [
{
"path": "",
"component": ThemeComponent,
"resolve": { me: AgentResolver },
"canActivate": [AuthGuard],
"children": [
{
"path": "...",
"loadChildren": "...",
"canActivateChild": [GuardBlockAgent]
},
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class ThemeRoutingModule { }
编辑:localStroage 不安全,这就是我不想使用它的原因。
【问题讨论】:
-
在警卫中使用
constructor并注入一些状态服务有什么问题? -
加载时间,越来越长了。我宁愿打一次电话而不是 X 次电话
-
你可以为
userService创建一个根级的facade服务。它应该缓存用户和任何其他关系数据。 -
有什么例子吗?没听说过
-
@crg 我发布了一个答案并为您创建了一个 stackBlitz 示例。
标签: javascript angular