哪个 Guard 触发了 GuardsCheckEnd?

Which Guard fired GuardsCheckEnd?

我们有一些路由器保护程序来保护我们应用程序的不同部分。
在某些情况下,但不是在所有情况下,我们希望在守卫 returns false.

时做事
router.events.subscribe(event => {
  if (event instanceof GuardsCheckEnd){
    if (!event.shouldActivate){
      //do stuff
    }
  }
});

以上代码检查是否有守卫失败。我们只想 //do stuff 仅当特定守卫失败时。
有没有办法找出哪个守卫失败了?

据我了解,您想知道哪些守卫失败了,因此您应该记录他们在守卫服务中的价值。这样您就可以随时使用它了。

第一后卫

// FirstGuard
constructor(private guardService: GuardService) {}

canActivate() boolean {
  const canActivate = //some logic
  this.guardService.set('firstGuard', canActivate);
  return canActivate;
}
export class GuardService {
  private data = {};

  public set(guardName: string, value: boolean): void {
    this.data[guardName] = value;
  }

  public get(guardName: string): boolean {
    return this.data[guardName] ?? false; // choose default
  }

  public clear(): void {
    this.data = {};
  }
}

您感兴趣的地方

router.events.subscribe(event => {
  if (event instanceof GuardsCheckStart) {
    // Make sure you don't have results from past events
    this.guardService.clear();
  }
  if (event instanceof GuardsCheckEnd){
    if (!event.shouldActivate){
      if (this.guardService.get('firstGuard')) {
        // do stuff
      }
    }
  }
});