Angular 角度:*适用于trackby日期

Angular 角度:*适用于trackby日期,angular,ngfor,Angular,Ngfor,我的问题是,我在一个角度模板中迭代一个日期数组。日期的引用每次都会更改,因此视图会重新绘制减慢应用程序速度的内容。我的想法是,对Date.getTime()进行“跟踪”,但这并不正确。DOM元素还没有重新创建。这使得网站速度非常慢 下面是代码示例: <div *ngFor ="let month of (months$ | async); trackBy: trackByMonth"> ... </div> trackByMonth(index, item) {

我的问题是,我在一个角度模板中迭代一个日期数组。日期的引用每次都会更改,因此视图会重新绘制减慢应用程序速度的内容。我的想法是,对Date.getTime()进行“跟踪”,但这并不正确。DOM元素还没有重新创建。这使得网站速度非常慢

下面是代码示例:

<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元素将被刷新。请检入开发工具,以验证这一点