Angular @Input 数组 - 如何引用不同的数组对象字段名称?

Posted

技术标签:

【中文标题】Angular @Input 数组 - 如何引用不同的数组对象字段名称?【英文标题】:Angular @Input array- how to reference different array object field names? 【发布时间】:2021-06-23 04:46:15 【问题描述】:

我想设置一个可重复使用的下拉菜单,通过它我将一个对象数组传递给我的下拉组件的@Input,然后更新其中的一些标签。

数组字段每次都会不同。例如,一个数组可能有一个displayName 字符串字段,而另一个数组将有一个名为id 的字符串作为我要引用的字段。

我不确定如何在每个实例的基础上引用这些。

下拉 html

<ng-container *ngFor="let item of content">
  <span class="button-label">item.whatever-the-field-is</span>
</ng-container>

下拉组件:

@Input() content: Array<any> = [];

下拉实例:

<multi-button-dropdown [content]="(myArrayObservable$ | async)"></multi-button-dropdown>

示例数组:

users = [
  
    id: 'afvnf102841-251',
    username: 'Joe Bloggs'
  
  ...
]

members = [
  
    displayName: 'Han Solo',
    location: 'Space'
  
  ...
]

问题:

我如何设置 dropdown.html/component 以便 &lt;span&gt; item.... 引用将是 displayName 用于成员 [] 实例,id 用于用户 [] 实例等等,传入通过另一个 @Input 值?

【问题讨论】:

示例数组错误。可能您正在尝试定义对象数组。 谢谢,我完全错过了 【参考方案1】:

我发现我可以创建一个设置标签值的新接口,并将 Observable 数组对象字段映射到该值,然后再将其传递给组件:

this.dropdownUsers = users.map(user => (
  
    label: user.displayName
  
));

<multi-button-dropdown [content]="dropdownUsers"></multi-button-dropdown>

【讨论】:

【参考方案2】:

一种快速的方法是使用*ngFor 内的keyvalue 管道在不知道其名称的情况下迭代对象属性。

<ng-container *ngFor="let item of content">
  <span class="button-label" *ngFor="let prop of item | keyvalue">
     prop.key  -  prop.value 
  </span>
</ng-container>

【讨论】:

以上是关于Angular @Input 数组 - 如何引用不同的数组对象字段名称?的主要内容,如果未能解决你的问题,请参考以下文章

Angular:如何订阅 @Input 更改

Angular2如何获取动态生成的HTML元素的引用

Angular2:通过引用传递组件之间的交互

如何从 index.html 自定义元素标签接收数组作为@Input?

在 Angular 中过滤表单数组

Angular 6:在 ngOnInit 中使用 @Input 的值