我是Angular中的新手,我需要实现一个返回true / false的函数,我将在canActivate中使用return,但是这个函数使用http.get的api,所以就像通信是异步的一样,这个函数总是返回FALSE,因为http.get还在进行中.
我的班主任:
- 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;
- }
和函数isLoggedIn()
- isLoggedIn() {
- let logged: boolean = false;
- this.http.get('api/values',this.httpService.headers())
- .map((res: Response) => {
- logged = res.json();
- });
- return logged;
- }
我读了很多问题,但我找不到答案.
后卫说明它可以回归
- Observable<boolean>,Promise<boolean> or boolean
所以将isLoggedIn更改为:
- isLoggedIn() {
- return this.http.get('api/values',this.httpService.headers())
- .take(1)
- .map((res: Response) => res.json());
- }
更新
- 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;
- }
- }