给它一个测试类
export class Item {
id: number;
name: string;
}
并添加一个指令来监控它的初始化和销毁
@Directive({selector: '[appMonitor]'})
export class MonitorDirective implements OnInit, OnDestroy {
ngOnInit(): void {
console.log('init');
}
ngOnDestroy(): void {
console.log('destroy');
}
}
初始化数组
itemArray: Item[] = [
{id: 1, name: 'Tom'},
{id: 2, name: 'Joe'},
{id: 3, name: 'KK'}
];
改变数组内容的两个函数
allFoo(): void {
this.itemArray = [
{id: 1, name: 'Tom_foo'},
{id: 2, name: 'Joe_foo'},
{id: 3, name: 'KK_foo'}
];
}
allBar(): void {
this.itemArray = [
{id: 1, name: 'Tom_bar'},
{id: 2, name: 'Joe_bar'},
{id: 3, name: 'KK_bar'}
];
}
准备工作已经完成,到目前为止一切顺利。
首先让我们在没有 trackBy 的情况下进行测试
<div *ngFor="let item of itemArray " appMonitor>
Id: {{item.id}} Name:{{item.name}}
</div>
很明显,每次更改数组角度时都会相应地重新创建组件。让我们尝试 trackBy 这一次:
<div *ngFor="let item of itemArray ;trackBy:identify" appMonitor>
Id: {{item.id}} Name:{{item.name}}
</div>
身份:
identify(index: number, item: Item): number {
return item.id;
}
该组件正在重新使用。因此我们可以得出结论,使用trackBy可以节省在hmtl中创建相同组件的工作。