我正在使用Keycloak / OAuth2,后者通过URI重定向中的哈希片段发送JWT令牌。在Angular中,使用锚定路由器滚动时会出现问题。从外部登录页面重定向回Angular时,出现错误:
@foreach($doc_data as $data)
{{ $data['id'] }}
@endforeach
像这样删除防护中的令牌并不能解决问题,因为登录过程将中止:
state=LONG.JWT.TOKEN is not a valid selector
at BrowserViewportScroller.push.../../node_modules/@angular/common/fesm5/common.js
.BrowserViewportScroller.scrollToAnchor
那么,有什么方法可以使路由器仅在某些模块/组件中而不是其他模块/组件中选择性地执行滚动,例如,使其不认为state =是querySelector?我的routerconfig(这仅适用于AppModule中的forRoot,不适用于惰性子模块;它们仅接受一个参数,例如路由),如下所示:
@Injectable()
export class StateFromUrlRemovalGuard implements CanActivate {
constructor(private router: Router) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
if (route.fragment && route.fragment.startsWith('state=')) {
this.router.navigate(state);
}
return true;
}
}