Вот мой охранник
import { Injectable} from '@angular/core';
import {
CanActivate,
ActivatedRouteSnapshot,
RouterStateSnapshot,
CanLoad,
Route
} from '@angular/router';
import { Observable, of } from 'rxjs';
import { switchMap, map, filter, take, tap, catchError } from 'rxjs/operators';
import { Store} from '@ngrx/store';
import * as fromStore from '../store';
@Injectable({
providedIn: 'root'
})
export class AuthenticationGuard implements CanLoad {
constructor(
private store: Store<fromStore.State>
) {}
canLoad(route: Route): boolean | Observable<boolean> | Promise<boolean> {
return this.store.select(this.store.getUser).pipe(
tap(user => {
if (!user.loaded) {
console.log('loading user');
this.store.dispatch(new fromStore.LoadUser());
}
}),
filter(user => user.loaded),
map(user => {
console.log('User loaded get rights', user);
return this.hasRights(user, route);
}),
catchError(error => {
console.log(error);
return of(false);
}),
take(1)
);
}
hasRights(user, route: Route): boolean {
if (!user.loaded) {
return false;
} else {
console.log('returning true');
return true;
}
}
}
Когда эта защита работает, она действует так, как будто селектор не завершен, но я получаю журналы «загрузка пользователя», затем я получаю журнал «Пользователь загружен, получая права», затем я получаю журнал «возвращая истину» , Я также включил в качестве последнего шага дубль (1), но все же он действует так, будто наблюдаемое не завершает то, что я пропускаю?