2017-08-29 90 views
1
hasPrivilege(privilege: string): boolean { 
    let isPrivilege: PrivilegeModel[] = []; 
    let val : boolean; 
    if (this.loginService.privilegeList != null && this.loginService.privilegeList != undefined && this.loginService.privilegeList.getValue() != null) { 
     isPrivilege = this.loginService.privilegeList.getValue().filter(item => item.name === privilege); 
     return this.isPrivilege(isPrivilege); 
    } else { 
     let val = this.getUserRolesAndMenus(privilege); 
     console.log("after2" +val); 
     this.getUserRolesAndMenus().subscribe(result => { 
      let val = result.roles.filter((element: any) => { 
       return element.privileges.filter(function (item: any) { 
        return item.name === privilege 
       }).length != 0 
      }).length != 
      return val; // can't return this. 
     },() =>{console.log("completed")}) 

    } 
} 

如何从订阅返回布尔值。是否有任何解决方法来实现这一目标?如何从anuglar中的订阅返回布尔值2

这是使服务器的呼叫

getUserRolesAndMenus() : Observable<boolean> { 
     let headers = new Headers(); 

     return this.http.get(ROLES_AND_MENUS + AppUtils.ID, { headers: headers }) 
      .map(response => response.json()) 
      .catch(this.handleError) 
    } 

回答

1

这个问题更关系到rxjs然后打字稿或角的方法。

正确rxjs方式实现这一目标是从hasPrivilege(..)方法返回一个观察的,是这样的:

hasPrivilege(privilege: string): Observable<boolean> { 
let isPrivilege: PrivilegeModel[] = []; 
let val : boolean; 
if (this.loginService.privilegeList != null && this.loginService.privilegeList != undefined && this.loginService.privilegeList.getValue() != null) { 
    isPrivilege = this.loginService.privilegeList.getValue().filter(item => item.name === privilege); 
    return Observable.of(this.isPrivilege(isPrivilege)); 
} else { 
    return this.getUserRolesAndMenus() 
    } 
} 

然后订阅返回可观察,如:

this.hasPrivilege(..)。subscribe(boolValue => {/ *用布尔值* /}做任何事情)

+0

无法读取未定义的属性'subscribe'。错误而subscibing this.hasPrivilege(..)。认购(boolValue => { – user630209

+0

你在哪里调用该方法又如何呢?也许尝试无“本”关键字... – Jonathan

+0

否则它只是这样一来,从返回“如果“它工作正常,从”其他“它会给出错误。 – user630209