根据a
documentaion
,
ngDoCheck
每次运行更改检测时,在ngOnChanges()之后立即调用,
在第一次运行ngOnInit()之后
注意,angular还使用
NgZone
从…起
documentation
要了解更改检测的工作原理,首先考虑应用程序何时需要更新HTML。通常,发生更新的原因如下:
-
组件初始化。例如,在引导Angular应用程序时,Angular加载引导组件并触发ApplicationRef。勾选()以调用更改检测和视图渲染。
-
-
HTTP数据请求。您还可以通过HTTP请求从服务器获取数据。
-
宏任务,例如setTimeout()或setInterval()。您还可以更新宏任务的回调函数中的数据,例如setTimeout()。
-
微任务,如承诺。然后()。其他异步API返回Promise对象(例如fetch),因此then()回调函数也可以更新数据。
-
其他异步操作。除了addEventListener()、setTimeout()和Promise。然后(),还有其他可以异步更新数据的操作。例如WebSocket。onmessage()和Canvas。toBlob()。
在此事件之后,Angular再次运行更改检测以检测数据可能已更改。
所以在你的代码中
Http request
ngDoCheck公司
ngDoCheck公司
您再次发出http请求。这就是为什么你得到无穷循环。
rxjs interval
import { interval } from 'rxjs';
----
export class Appcomponent {
ngOninit() {
interval(3000).subscribe(x => {
this.commentService.getComments().subscribe((result) => {
this.comments = result.comments;
}, (error) => console.log(error));
})
}
}