Porównaj ceny domen i usług IT, sprzedawców z całego świata

Angular2 - zwraca wartość logiczną z subskrypcją canActivate


Jestem nowy w Angular, muszę zaimplementować funkcję, która zwraca true/false, zamierzam użyć funkcji return w canActivate guard, ale ta funkcja zużywa api na http.get, więc ponieważ komunikacja jest asynchroniczna, ta funkcja zawsze zwraca FALSE, ponieważ http .get jest nadal w toku.
Mój fajny strażnik:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { let url: string = state.url;
if (this.loginService.isLoggedIn()) {
return true;
} this.loginService.redirectUrl = url; this.router.navigate(['login']); return false;
}

i funkcja isLoggedIn ()
isLoggedIn() { let logged: boolean = false; this.http.get('api/values', this.httpService.headers())
.map((res: Response) => {
logged = res.json();
}); return logged;}

Czytałem dużo pytań, ale nie mogłem znaleźć odpowiedzi.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Strażnik maszynisty mówi, że może wrócić
Observable<boolean>, Promise<boolean> or boolean

więc zmień isLoggedIn na:
isLoggedIn() { return this.http.get('api/values', this.httpService.headers())
.take(1)
.map((res: Response) => res.json());
}


odnowienie

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
let url: string = state.url; return this.isLoggedIn().map(loggedIn => {
if(!loggedIn) {
this.loginService.redirectUrl = url;
this.router.navigate(['login']);
}
return loggedIn;
}
}

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się