2017-08-29 5 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() 
    } 
} 

を返したように、観察可能:

+0

未定義のプロパティ 'subscribe'を読み取ることができません。このサブスクライブでは、サブスクライブできません。 this.hasPrivilege(..)。subscribe中にエラーが発生しました。(boolValue => { – user630209

+0

どこからメソッドを呼び出しますか? 'this'キーワードなしで多分試してください... – Jonathan

+0

" "それは正常に動作し、" else "からエラーが返されます。 – user630209

関連する問題