代码之家  ›  专栏  ›  技术社区  ›  Oscar Rodriguez Arroyo

我试图从角度服务接收布尔值,但它只返回整个对象

  •  0
  • Oscar Rodriguez Arroyo  · 技术社区  · 7 年前

    我正在构建一个简单的服务,无论我是否是团队的一员,它都会返回(简单的true或false)。我已经验证了后端,它的工作。缺少的部分在我的angular应用程序中。

    这个 authentication.service.ts

    import { Injectable } from '@angular/core';
    
    import { Http, Headers, Response, Request, RequestMethod, RequestOptions } from '@angular/http';
    import { Observable } from 'rxjs/Rx';
    import { environment } from '../../../environments/environment';
    
    let roleUrl = environment.apiBaseUrl + 'CoreRole';
    let options = new RequestOptions({ withCredentials: true });
    
    @Injectable()
    export class AuthenticationService {
    
      constructor(private http: Http) { }
    
      getRoleByName(name): Observable<boolean> {
        console.log('getRoleByName FN: ' + roleUrl + '?name=' + name);
          return this.http.get(roleUrl + '?name=' + name, options)
          .take(1)
          .map(res => <boolean>res.json())
          .catch(this.handleError);
      }
    
      private handleError(error: Response) {
        console.log(error);
        return Observable.throw(error.json().error || 'Server error');
      }  
    
    }
    

    or.guard.ts 看起来像

    import { Injectable } from '@angular/core';
    import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
    import { Router } from '@angular/router';
    
    import { Observable } from 'rxjs/Rx';
    import { AuthenticationService } from '../services/authentication.service';
    
    @Injectable()
    export class OrGuard implements CanActivate {
      constructor(private authenticationService: AuthenticationService, private router: Router) { }
    
      isProjectTeam : boolean;
    
      canActivate() {
    
        this.isProjectTeam = <boolean><any> this.authenticationService.getRoleByName("ProjectTeam");
    
        if(this.isProjectTeam === true)
        {
          return true;
        }
        else
        {
          this.router.navigateByUrl('/not-authorized');
        }
    
        return false;
      }
    
    } 
    

    /not-authorized 页面,因为 isProjectTeam 变量从未格式化为布尔值。

    1 回复  |  直到 7 年前
        1
  •  2
  •   HaveSpacesuit    7 年前

    Observable boolean ,当您想要获取 可观察的 .

    如果你尝试 let x = this.authenticationService.getRoleByName("ProjectTeam"); ,你会看到x是类型 Observable<boolean>

    你可以有 canActivate() 可观察<布尔值> 布尔型

    canActivate(): Observable<boolean> {
        return this.authenticationService.getRoleByName("ProjectTeam").map(
            response => {
                if (response) {
                    return true;
                }
                else {
                    this.router.navigateByUrl('/not-authorized');
                    return false;
                }
            });
    }
    

    如果您使用的是TypeScript,在处理像这样的复杂对象时,可以做的一件事是使用类似于 let x = ...

    More info on the CanActivate guard