Angular 计时器因组件销毁而闪烁

Angular timer is flickering because of the component destroy

我有一个父组件,我从 BE 获取数据并将数据传递给子组件:

<app-team-tile [teamData]="team" (openNotes)="openNotes($event)"></app-team-tile>

teamData 表示团队成员的集合。在 teamTile 组件中,我将数据传递给下一个子组件:

<app-team-firefighter
   [firefighter]="firefighter"
   [longestAlarm]="getTheLongestFirefighterAlarm(firefighter)"
 ></app-team-firefighter>

longestAlarm 是returns 向子组件发出警报的方法。在 app-team-firefighter 组件中,我在 ngOnChanges 方法中有一个计时器:

 ngOnChanges(): void {
    if (this.longestAlarm) {
      interval(1000).pipe(
        map((count: any) => this.format(count + this.longestAlarm.duration))
      ).subscribe((time: string) => {
        this.timer = time;
      });
    }
  }

在模板中我显示了 this.timer 值,但它每 5 秒闪烁一次,因为我每 5 秒从 BE 获取数据,而且我知道当我从 BE 在父项中获取数据时,子项破坏。我该怎么做才能消除这种闪烁。提前致谢!

为什么要在 ngOnChanges 中执行此操作 -> 每次输入值更改时都会调用此生命周期挂钩。但是您没有使用这些更改值,因此您应该将订阅移至 ngOnInit.

如果您每 5 秒更改一次输入,则每次该方法运行时都会创建一个新订阅! (可能导致你的闪烁)。你也没有从我所看到的清​​理这些,所以你只是每 5 秒进行一次重复订阅,这将导致内存泄漏。

您将要取消订阅! (我没有在下面包括这个)

ngOnInit() {
    interval(1000).pipe(
         filter(_ => !!this.longestAlarm),
         map((count: any) => this.format(count + this.longestAlarm.duration))
     ).subscribe((time: string) => {
         this.timer = time;
     });
}