在4角卫士中使用服务

时间:2018-05-06 17:30:34

标签: angular-guards

请协助角卫,我在下面有以下角卫:

  getUserRole(): Observable<Response> {
  const options = this.headers();
    return this.http.get(`${environment.ApiUrl}/Roles/getRole`,options)
  .map(res => res.json())
  .catch(res => Observable.throw(res.json()));
 }

在服务中:

getUserRole()

我正在尝试订阅this.role函数,然后将响应分配给undefined,但这种情况并未发生,角色始终为...subscribe(res => console.log(res))。当我做{{1}}时,我会看到响应数据。

1 个答案:

答案 0 :(得分:1)

在检查是否可以激活该路由之前,您必须等待异步HTTP请求的结果。

尝试返回一个新的Observable:

canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot
): Observable<boolean> | Promise<boolean> | boolean {

    return new Observable(observer => {   
        //
        this.accountService.getUserRole().subscribe(role => {
            //
            if (role === 'admin') {
                observer.next(true); // Allowing route activation
            } else {
                observer.next(false); // Denying route activation                
            }
        }, err => observer.next(false)); 
    }); 
}