我正在尝试使用authguardService中来自ngrx / store的元素。 当路由到达可以检查canActivate的地步时,它可以正常工作,但是当元素更改时,路由保护器不会更改其输出,并且canActivate函数仍然返回,即使它应该返回false。
canActivate函数的代码:
canActivate(): Observable<boolean> | Promise<boolean> | boolean {
return this.store.pipe(
select('account'),
map((account) => {
console.log('account', account);
if (account.agb === true) {
return true;
} else {
this.router.navigate(['/agb']);
return false;
}
}),
take(1)
);
}
路由:
{
path: '',
canActivate: [BesucherGuardService],
children: [
{
path: 'offers',
component: BesucherTestComponent
}
]
},
{
path: '',
canActivate: [AuthGuardService, AgbGuardService, LernenderGuardService],
children: [
{
path: 'offers',
component: LernenderTestComponent
}
]
},
如您在上面的代码中看到的,我定义了两次/ offer路线,一次是当您成为Besucher时,一次是当您成为Lernender时。 不幸的是,即使在商店中account.role更改为LERNENDER之后,它仍然与路由匹配,因为BesucherGuardService似乎不知道account.role变量的更改。
我该如何解决?