Охрана срабатывает один раз при каждом запуске навигации.
Как только angular получает первое излучение от охранника, он отменяет подписку и использует полученное значение, чтобы разрешить / запретить маршрутизацию.
Это означает, что вы не можете периодически генерировать значения в guard, чтобы изменить исходное значение.
То, что вы пытаетесь достичь, может быть реализовано следующим образом:
import {Injectable, OnDestroy} from '@angular/core';
import {CanActivate} from '@angular/router';
import {interval, Observable, Subject} from 'rxjs';
import {map, takeUntil, tap} from 'rxjs/operators';
@Injectable({
providedIn: 'root',
})
export class AuthGuard implements CanActivate, OnDestroy {
protected readonly auth$: Subject<boolean> = new Subject();
protected readonly destroy$: Subject<void> = new Subject();
constructor(
) {
interval(5000).pipe(
map(n => n % 2 === 0),
tap(value => this.auth$.next(value)),
takeUntil(this.destroy$),
).subscribe();
}
public canActivate(): Observable<boolean> {
return this.auth$;
}
// not sure if this part works for guards
// but would be nice to unsubscribe once you don't need this guard
// anymore
public ngOnDestroy(): void {
this.destroy$.next();
this.destroy$.complete();
}
}