角度2 - 一次从多个来源提供表格

时间:2017-06-08 05:40:32

标签: angular typescript observable

我必须为分配给他们的用户显示不同角色的表。我提供了#C API,我需要调用三个方法来返回数据以提供表格。所以我在表格组件中使用subscribe

this.roleService.getGlobalRoles().subscribe(res => this.tableContent = res);

功能getGlobalRoles()利用forkJoin一次获取所有三个回复。

getGlobalRoles(): Observable<RoleData[]> {
  return Observable.forkJoin(
    this.http.get(this.urlGlobalRoles).map(response => response.json()),
    this.http.get(this.urlUsers).map(response => response.json()),
    this.http.get(this.urlRolesEnum).map(response => response.json())
  ).map(res => this.processData({ globalRoles: res[0], users: res[1], rolesEnum: res[2] }));      
}

方法processData将这三个响应合并到一个RoleData对象中,并将其推送到RoleData个对象的数组中。

processData(combined): RoleData[] {
    var result = new Array<RoleData>();

    for (let rawData of combined.globalRoles) {
        let role= rawData as RoleData;
        role.fullName = this.getFullName(combined.users, rawData.userId);
        // Goes through the users response and returns the user full name 
        role.roleName = this.getRoleName(combined.rolesEnum, rawData.globalRoleKey);
        // Goes through the roles response and returns the role name
        result.push(role);
    }
    return result;
}

正如您所看到的,我使用的方法使用 fullName roleName 更新 RoleData 对象,以便在桌子。然后我有两个单独的方法getGlobalRolesEnumgetUsers分别返回用户角色。我用它们来编辑可编辑弹出窗口中的组合框。

有没有办法简化它?我的解决方案有效,但我强烈认为有更好的方法。

编辑:为了明确我要避免的是让这两种方法只与 getGlobalRoles()做同样的事情对于单独的电话。

getGlobalRolesEnum(): Observable<any> {
    return this.http.get(this.getRolesEnumUrl)
        .map(response => response.json());
}

getUsers(): Observable<any> {
    return this.http.get(this.getUsersUrl)
        .map(response => response.json());
}

0 个答案:

没有答案