设置很简单。我有一个守卫路线的守卫。如果是用户的属性locationSaved === true
那么我们要让用户进入页面。
如果浏览器令牌的第一次检查是假的,我们想发出一个 HTTP 请求来查看用户对象的 locationSaved 属性的最新版本是否可能更新为真。
我做了服务器请求,它返回真,所以我希望它打开页面,但不幸的是它没有。我认为这与我在页面中所做的异步请求有关,因为当我将服务器请求代码替换为简单的return true
; 然后它确实打开了页面。
如果服务器返回true,有谁知道我如何使用这个异步请求并导航到页面?
这是我的守卫代码。我进行了设置,以便它发出异步请求并且服务器返回 true。但是,它不会导航到该页面。
import { Injectable } from '@angular/core';
import {ActivatedRouteSnapshot, CanActivate} from '@angular/router';
import {AuthenticationService} from './auth.service';
import {Observable} from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class LocationGuardService implements CanActivate {
constructor(private authService: AuthenticationService) { }
canActivate(route: ActivatedRouteSnapshot): boolean {
console.log('entered the guard');
if (this.authService.isLoggedIn()) {
if (this.authService.currentUser().user.locationSaved) {
return true;
} else {
this.authService.isLocationSaved()
.subscribe((status: {saved: boolean}) => {
console.log('saved', status);
return status.saved;
});
}
} else {
return false;
}
}
}