0
アプリをロードする前に、ユーザーがログインしていてデータが読み込まれているかどうかを確認したいと思います。したがって、私は2人のガードを最上のルートに置くが、実行されない。トップレベルのルートに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'])
);
}
}
app doe実際に/signin.html
にリダイレクトする必要がある場合は、/something
にリダイレクトされます。私は間違って何をしていますか?
私は試しましたが、これもうまくいきませんでした。私はもう一度試して、観察された挙動を報告します。 – KenavR