You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular提取数组对象嵌套roles属性并添加至新数组展示

我来帮你搞定这个提取角色并展示的需求,咱们一步步调整代码:

1. 先修正模型定义(关键!)

你当前的AllUsers接口里allUsers定义成string[]是不对的,因为实际返回的是包含roles属性的用户对象数组。咱们先定义正确的类型:

// 先定义单个用户的接口,根据实际字段补充其他属性(比如id、username等)
export interface User {
  roles: string[]; // 假设roles是字符串数组,比如["admin", "editor"]
  // 其他用户字段:username: string; id: number; 等等
}

export interface AllUsers { 
  allUsers: User[]; // 改成User类型的数组
}

2. 调整组件代码,提取角色到roleName数组

在获取到用户数据后,用map方法遍历数组,把每个用户的roles属性提取出来存入roleName:

import { User, AllUsers } from './你的模型文件路径';

export class AllUserComponent implements OnInit { 
  allUsers: User[]; // 改用正确的User类型
  roleName: string[][] = []; // 每个元素对应一个用户的roles数组

  constructor(private userService: UserService) {} 

  ngOnInit() { 
    this.userService.getAll().subscribe(data => { 
      this.allUsers = data.allUsers; 
      // 提取每个用户的roles到roleName数组
      this.roleName = this.allUsers.map(user => user.roles);
      console.log('用户列表:', this.allUsers);
      console.log('角色列表:', this.roleName);
    }); 
  }
}

3. 在HTML表格中展示角色

用*ngFor遍历用户,通过索引对应roleName数组,再用join(', ')把数组转成友好的逗号分隔字符串:

<table>
  <thead>
    <tr>
      <th>用户名</th>
      <th>角色</th>
      <!-- 其他表头列 -->
    </tr>
  </thead>
  <tbody>
    <!-- 遍历用户列表,同时获取索引i -->
    <tr *ngFor="let user of allUsers; let i = index">
      <td>{{ user.username }}</td>
      <!-- 展示对应索引的角色,转成逗号分隔的文本 -->
      <td>{{ roleName[i].join(', ') }}</td>
    </tr>
  </tbody>
</table>

小提示:其实可以不用单独维护roleName数组

如果只是为了展示,直接在模板里访问user.roles会更简洁,省去维护额外数组的麻烦:

<td>{{ user.roles.join(', ') }}</td>

这样就不需要roleName数组了,代码更清爽~

内容的提问来源于stack exchange,提问作者Błażej Witczak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:01:04