超过最大调用堆栈大小(Angular8)

超过最大调用堆栈大小(Angular8),angular,typescript,Angular,Typescript,我试着从角度做下面的事情,我不明白问题出在哪里? 要知道这是一个递归函数,但在javascript中有很多解决方法,我在这里尝试了它们,但没有成功 你对此有什么办法吗 从'@angular/core'导入{Component,OnInit}; @组成部分({ 选择器:“应用程序标题”, templateUrl:'./header.component.html', 样式URL:['./header.component.scss'] }) 导出类HeaderComponent在Init上实现{ 构

我试着从角度做下面的事情,我不明白问题出在哪里? 要知道这是一个递归函数,但在javascript中有很多解决方法,我在这里尝试了它们,但没有成功 你对此有什么办法吗

从'@angular/core'导入{Component,OnInit};
@组成部分({
选择器:“应用程序标题”,
templateUrl:'./header.component.html',
样式URL:['./header.component.scss']
})
导出类HeaderComponent在Init上实现{
构造函数(){}
changeImg=()=>{
设i=0;
常数时间=1000;
常量图像=[
“../../assets/imgs/dashboard_full_1.webp”,
“../../assets/imgs/dashboard_full_2.webp”
];
document.slide.src=图像[i];
如果(i
您的问题在于:

setTimeout(this.changeImg(), time);
你正在调用
this.changeImg()
,它调用
this.changeImg()
,然后调用
this.changeImg()
,直到Angular对你感到厌烦并使你的应用程序崩溃

如果没有发生调用堆栈大小错误,您将把
this.changeImg()
的结果传递给
setTimeout
,而不是像预期的那样传递对函数的引用

只需删除调用即可

setTimeout(this.changeImg, time);

如何在Ngonit中使用set timeout或setinterval,以便反复重复该函数,或者这样做的最佳实践是什么?如果您按照我的建议从
changeImg
中删除调用,您的方法就可以了。至于什么是最佳实践,我不能说,但我个人认为,如果你在
ngOnInit
中设置一个间隔,而不是让
changeImg
不断设置超时,那么就更清楚了。记住
setTimer
setInterval
都需要函数引用,所以不要调用
this.changeImg
setInterval(this.changeImg,1000)
我的伙计,每个人都必须先学习。重要的是你要问这个问题,而不是放弃或指责。