哪个 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
}
}
}
});
我们有一些路由器保护程序来保护我们应用程序的不同部分。
在某些情况下,但不是在所有情况下,我们希望在守卫 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
}
}
}
});