TrackBy必须是函数,但在angular 2中未定义接收?

TrackBy必须是函数,但在angular 2中未定义接收?,angular,typescript,Angular,Typescript,我正在Angular 2中创建一个演示应用程序。但在这样做的时候,我犯了一个错误: core.umd.js:3491异常:未捕获(承诺中):错误:security.component.html:35:72导致的错误:trackBy必须是一个函数,但接收时未定义。 错误:trackBy必须是一个函数,但未定义 任何人都可以在下面的代码中告诉我我做错了什么 security.component.html: <h2>Template :</h2> <template ng

我正在Angular 2中创建一个演示应用程序。但在这样做的时候,我犯了一个错误:

core.umd.js:3491异常:未捕获(承诺中):错误:security.component.html:35:72导致的错误:trackBy必须是一个函数,但接收时未定义。 错误:trackBy必须是一个函数,但未定义

任何人都可以在下面的代码中告诉我我做错了什么

security.component.html:

<h2>Template :</h2>
<template ngFor let-hero [ngForOf]="heroes" let-i="index" let-odd="odd" [ngForTrackBy]="trackById">
  <div [class.odd]="odd">({{i}}) {{hero.name}}</div>
</template>
import { Component,Input } from '@angular/core';
@Component({
    moduleId    :     module.id,
    selector    :     'security-component',
    templateUrl :     '../views/security.component.html'
})

export class securityComponent{

    private heroes = [
    {id: 11, name: 'Mr. Nice'     },
    {id: 12, name: 'Narco'        },
    {id: 13, name: 'Bombasto'     },
    {id: 14, name: 'Celeritas'    },
    {id: 15, name: 'Magneta'      },
    {id: 16, name: 'RubberMan'    },
    {id: 17, name: 'Dynama'       },
    {id: 18, name: 'Dr IQ'        },
    {id: 19, name: 'Magma'        },
    {id: 20, name: 'Tornado'      }
      ];
}

安全组件需要定义
trackById

export class SecurityComponent {
  trackById({id}: Hero) {
    return id;
  }
}

trackBy
接受一个有两个参数的函数:
index
item
。如果给定了
trackBy
,则角度轨迹将根据函数的返回值进行更改

因此,您需要在组件中使用名为
trackById
的函数

trackById(index, hero) {
  return hero.id    
}
因为2.4.2允许对
NgForTrackBy