0
加載應用程序之前,我想檢查用戶是否登錄並加載一些數據。因此,我把兩名警衛放在最高的路線上,但他們沒有被執行。難道不可能把canActivate放在頂層路線上嗎?在哪裏放置警衛是否有任何限制?路由器:CanActivate在頂級路線
路由配置
export const routes = [
{
path: '',
canActivate: [IsAuthenticatedGuard, IsDataLoadedGuard],
children: [
{
path: '',
redirectTo: '/something',
pathMatch: 'full'
}
]
}
];
/東西是不同的模塊的一部分,該路徑被使用RouterModule.forChild()
衛兵另一模塊中裝載
@Injectable()
export class IsAuthenticatedGuard implements CanActivate {
constructor(private _router: Router) {}
canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<boolean> {
if (!this._isSignedIn()) {
window.location.replace('/signin.html');
return Observable.of(false);
}
return Observable.of(true);
}
_isSignedIn(): boolean {
return document.cookie.indexOf('jwt_cookie') !== -1;
}
}
@Injectable()
export class IsDataLoadedGuard implements CanActivate {
private homeState$: Observable<IHomeState>;
constructor(private _router: Router, private _store: Store<IAppState>) {
this.homeState$ = _store.select('home');
}
canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<boolean> {
return this.homeState$.map((homeState: IHomeState) =>
!homeState.get('loading') || homeState.hasIn(['home', 'id'])
);
}
}
應用程序doe s被重定向到/something
,當它實際上應該重定向到/signin.html
。我究竟做錯了什麼?
我試過了,但是這也不起作用,我會再試一次並報告觀察到的行爲。 – KenavR