Angular 角度:*适用于trackby日期
我的问题是,我在一个角度模板中迭代一个日期数组。日期的引用每次都会更改,因此视图会重新绘制减慢应用程序速度的内容。我的想法是,对Date.getTime()进行“跟踪”,但这并不正确。DOM元素还没有重新创建。这使得网站速度非常慢 下面是代码示例:Angular 角度:*适用于trackby日期,angular,ngfor,Angular,Ngfor,我的问题是,我在一个角度模板中迭代一个日期数组。日期的引用每次都会更改,因此视图会重新绘制减慢应用程序速度的内容。我的想法是,对Date.getTime()进行“跟踪”,但这并不正确。DOM元素还没有重新创建。这使得网站速度非常慢 下面是代码示例: <div *ngFor ="let month of (months$ | async); trackBy: trackByMonth"> ... </div> trackByMonth(index, item) {
<div *ngFor ="let month of (months$ | async); trackBy: trackByMonth">
...
</div>
trackByMonth(index, item) {
return item.getTime();
}
...
trackByMonth(索引,项目){
return item.getTime();
}
有人知道如何避免重新绘制DIV元素吗?
*ngFor
使用trackby
,仅在数组中的项发生更改或添加或删除时刷新或添加项,它不基于作为输入提供的trackby函数
所以,如果您的项目不断变化,那么它不会帮助您,所以请检查您的项目没有修改,并保持对象标识,而不是像时间这样的变量值
要了解更多信息,可以使用developer工具,在dom中每次修改后,都会突出显示dom元素
例如:
您需要有如下代码,其中项目具有标识符,跟踪项目,主要是在添加项目或修改项目时,trackby函数将出现在图片中,并通过其id值标识每个对象
episodes = [
{ title: 'Winter Is Coming', director: 'Tim Van Patten', id: 0 },
{ title: 'The Kingsroad', director: 'Tim Van Patten', id: 1 },
];
*ngFor="let episode of episodes;trackBy: trackById"
trackById(index: number, episode: any): number {
return episode.id;
}
(months$| async)表示每次都从可观察的http获取数据,对吗?我是从ngrx存储选择器中获取的,如果是trackby ngFor基于标识的刷新项目,那么您可能会遇到
getTime()
这可能会导致问题,您为什么不这样尝试trackByMonth(索引,项目){return index;}
返回索引而不是time@PranayRana,是的,我删除了我的“愚蠢”评论。我尝试使用index,但也不起作用。index也没有真正识别对象,因为月份可能在变化(例如,从5月份开始,而不是1月份)。如果我正确理解trackby,则必须返回对象的唯一标识符?实际上不可能保留对象标识。没有trackby,项目是通过标识跟踪的。因此,我认为通过trackby,我可以更改此行为,即项目由另一个uniquie标识符跟踪?在我的情况下,日期…@Flash91-若您认为它将保持不变,那个么它是可以的,但若您的对象属性不断更改,那个么您的dom元素将被刷新。请检入开发工具,以验证这一点