ng具有自定义参数的trackBy函数

时间:2017-10-03 19:20:11

标签: angular ngfor angularjs-track-by

trackBy函数(例如在ngFor中)提供了两个参数:index和item(来自正在迭代的集合)。有没有办法将附加信息(作为参数?)传递给trackBy函数?

我的情况是,我可能会为我的组件的每个实例(包含ngFor)迭代各种类型,并使用不同的标识字段名称。理想情况下,我希望能够传递第三个参数,指示应该读取项目中的哪个字段。

2 个答案:

答案 0 :(得分:4)

bind方法可以帮助您做到这一点

<强> template.html

<div *ngFor="let item of items; trackBy: trackByFn.bind(this, 'name')">
  {{ item }}
</div>

<强> component.ts

items = [
  {
    id: 1,
    name: 'name1'
  },
  {
    id: 2,
    name: 'name2'
  }
]
trackByFn(customParam, index, item) {
  return item[customParam];
}

答案 1 :(得分:0)

我知道这个问题已有一年多了,但我想添加另一个选择:

您可以创建一个以其他参数为参数并返回TrackByFunction的Angular管道。这种管道的用法如下:

<div *ngFor="let item of items; trackBy: (myParameter | myTrackByFn)">

管道的代码如下:

@Pipe({ name: 'myTrackByFn' })
export class MyTrackByFnPipe implements PipeTransform {

  transform<T>(myParameter: any): TrackByFunction<T> {
    return (index: number: item: T) => {
      // ...
    };
  }
}

此方法带来的好处之一是,您可以在各个组件之间重用管道,而无需在每个组件中重新实现trackBy函数。

您可以在Ben Nadel's post中了解有关此方法的更多信息。