我必须为分配给他们的用户显示不同角色的表。我提供了#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 对象,以便在桌子。然后我有两个单独的方法getGlobalRolesEnum
和getUsers
分别返回用户和角色。我用它们来编辑可编辑弹出窗口中的组合框。
有没有办法简化它?我的解决方案有效,但我强烈认为有更好的方法。
编辑:为了明确我要避免的是让这两种方法只与 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());
}