Angular 具有列表动态输入属性的组件

Angular component with dynamic input properties for list

只是想知道这是否可能

场景是: 我想使用 *ngFor 创建一个列表组件,但我希望 *ngFor 嵌入组件本身

foo-list-items.html(分量)

<ul>
   <li *ngFor="let item of list" (click)="goto(item)">
       {{ item.name }}<br />
       <small> Email: {{ item.email }} </small>
   </li>
</ul>

是否可以使用 @Input() name:any 根据组件 parent 的输入创建循环名称 属性?

所以在 html 中可以写

Parent html

<foo-list-items [list]="usersList" 
                (onItemClicked)="gotoUser($event)" 
                [name]="item.name">
</foo-list-items>

其中[name]="item.name"是传入child组件的动态属性,在循环中引用。

例如,如果一个人有 2 个列表

  1. 用户列表

  2. 节目列表

但是 name 属性 的数据对于用户列表是 .name,对于节目列表是 .programName。您能否将 *ngFor 循环中的项目的 属性 定义为 parent 组件的输入值?

所以基本上创建了一个通用的 *ngFor,不管 item.name 是什么。 child 组件循环中的名称将显示为 item.nameitem.programName

您可以将字符串作为输入 属性 传递给 foo-list-items 组件,例如:

<foo-list-items [list]="usersList" 
            (onItemClicked)="gotoUser($event)" 
            [name]="'name'">
</foo-list-items>

<foo-list-items [list]="programList" 
            (onItemClicked)="gotoUser($event)" 
            [name]="'programName'">
</foo-list-items>

然后在组件模板中使用数组键(object['property'])而不是点符号:

<ul>
  <li *ngFor="let item of list" (click)="goto(item)">
   {{ item[name] }}<br />
   <small> Email: {{ item.email }} </small>
  </li>
</ul>