TrackBy必须是一个函数,但收到未定义的角2?

问题描述:

我创造的角度2.演示应用程序,但同时这样做,我得到这个错误:TrackBy必须是一个函数,但收到未定义的角2?

core.umd.js:3491 EXCEPTION:未捕获的(在承诺):错误:错误security.component。 html:35:72由:trackBy必须是一个函数,但收到未定义。 错误:trackBy必须是一个函数,但收到undefined

任何人都可以建议我在下面的代码中做错了什么?

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> 

security.component.ts:

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'  } 
     ]; 
} 

trackBy采用具有两个参数的函数:indexitem。如果给出trackBy,则角度曲线会根据函数的返回值而变化。

所以,你需要有名字trackById功能在您的组件

trackById(index, hero) { 
    return hero.id  
} 

由于2.4.2允许使用null/undefinedNgForTrackByhttps://github.com/angular/angular/blob/master/CHANGELOG.md#242-2017-01-06

SecurityComponent需要定义trackById

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