我需要在守卫中注入一个服务。该守卫检查用户是否受邀请,如果是,则可以访问路由。
为了检查这个条件,我需要调用一个从数据库中获取此信息的服务。
我遇到了循环依赖错误。我知道我们不应该在守卫中注入服务,但在这种情况下,我必须这样做:
providers: [AuthService, HackService, HacksStorageService, AuthGuard, EmailGuard],
并且警卫:
import { ActivatedRouteSnapshot, RouterStateSnapshot, CanActivate } from "../../../node_modules/@angular/router";
import { HacksStorageService } from "../shared/hacks-storage.service";
export class EmailGuard implements CanActivate {
constructor(
private hacksStorageService: HacksStorageService,
) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
this.hacksStorageService.fetchHack();
// check if user was invited. should be in the participants array
return true;
}
}
我感到相当困惑。通常我使用guard来检查用户是否已经登录,因此我通常从Firebase导入东西,而不是从我的自己的服务中导入,所以没有循环依赖。
现在我想要根据自己的数据检查条件是否发生。如果由于循环依赖关系而无法注入服务,则该如何在EmailGuard中注入我的自己的数据呢?
谢谢。
EmailGuard
中注入数据”是什么意思?同时,请将您的AuthGuard
放置在路由模块中,而不是应用程序或任何功能模块中。 - Amit Chigadani