У меня есть сторож, который либо возвращает Observable, либо перенаправляет на другой URL-адрес на основе ответа HTTP. Служба, которую вызывает охранник, выполнит HTTP-вызов или, если она уже была вызвана и сохранена в службе, должна вернуть сохраненное значение. Смотрите сервис ниже. Без оператора if все работает нормально, но с оператором if кажется, что защита не позволяет маршрутизатору активироваться (карта возвращает true). Там нет ошибки в консоли. Заранее спасибо.
Редактировать: Использование Angular 8.1
Служба:
private company: Company;
public companySubject: BehaviorSubject<Company> = new BehaviorSubject(this.company);
get(slug: string, params: HttpParams = null): Observable<Company>
{
if (this.company && this.company.slug === slug) {
this.companySubject.next(this.company);
return this.companySubject.asObservable();
}
return this.http.get<Company>(`companies/${slug}`, {params: params}).pipe(
tap((response: Company) => {
this.company = response;
this.companySubject.next(this.company);
})
);
}
Охрана:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean>
{
const slug = route.parent.paramMap.get('company');
return this.companyService.get(slug).pipe(
tap((company: Company) => {
if (
company.locations_count == 0 ||
!company.subscribed
) {
this.router.navigateByUrl(`/app/company/${slug}/setup`);
}
}),
map(() => true)
);
}