首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular应用程序内的setInterval()导致无限UI重新渲染

Angular应用程序内的setInterval()导致无限UI重新渲染
EN

Stack Overflow用户
提问于 2020-09-02 03:49:37
回答 1查看 257关注 0票数 1

下面我在我的Angular 9应用程序中使用了一个非常简单的倒计时计时器。实际的倒计时计时器显示“天、小时、分钟、秒”的倒计时,并且应该每秒钟更新一次。

倒计时计时器在它自己的组件中,因为它在它自己的组件中,所以我预计当计时器的模板更新时,只会更新该组件。但是,我发现倒计时的父页面也在重新渲染。

我知道setInterval已经'monkey patched' by zone.js了,但是我找不到一种方法来保持倒计时计时器的反应性。

如有任何建议,我们将不胜感激

代码语言:javascript
复制
import { Component, OnInit, OnDestroy } from '@angular/core';

@Component({
  selector: 'app-countdown',
  template: `<h2>{{counter}}</h2>`
})
export class CountdownComponent implements OnInit, OnDestroy {
  counter = 0
  interval;

  ngOnInit() {
    this.startCountDown();
  }

  ngOnDestroy() {
    clearInterval(this.interval);
  }

  startCountDown() {
    this.interval = setInterval(() => {
      this.counter++;
    },1000)
  }
}

EN

回答 1

Stack Overflow用户

发布于 2020-09-02 11:01:03

可以在角度区外运行interval,然后手动检测更改:

代码语言:javascript
复制
  startCountDown() {
    this.zone.runOutsideAngular(() => {
      this.interval = setInterval(() => {
        this.counter++;
        this.changeDetectorRef.detectChanges(); 
      },1000)
    });
  }

但在这个具体的例子中,我可能会使用普通的Javascript来更新值:

代码语言:javascript
复制
  startCountDown() {
    this.zone.runOutsideAngular(() => {
      this.interval = setInterval(() => {
        this.counter++;
        this.elementRef.nativeElement.querySelector('h2').innerHTML = this.counter;
      },1000)
    });
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63694509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档