在 Angular 中,当使用 forEach() 迭代数组时,使用 setTimeout() 函数可能会导致函数被忽略。这是因为 JavaScript 的事件循环机制在循环过程中忽略了该函数。
解决此问题的一种方法是使用 Angular 的 ChangeDetectorRef 服务来触发变更检测。这将强制 Angular 更新视图并执行 setTimeout() 函数。
以下是一个示例代码,演示如何在 Angular 中使用 ChangeDetectorRef:
import { Component, ChangeDetectorRef } from '@angular/core';
@Component({
selector: 'app-example',
template: ,
})
export class ExampleComponent {
itemList = ['item1', 'item2', 'item3'];
constructor(private cdr: ChangeDetectorRef) {}
ngAfterViewInit() { // 使用 setTimeout() 函数 this.itemList.forEach((item) => { setTimeout(() => { console.log(item);
// 触发变更检测
this.cdr.detectChanges();
}, 1000);
});
} }
在上述示例中,ngAfterViewInit() 在视图初始化之后被执行。然后,使用 forEach() 循环迭代 itemList 数组,并使用 setTimeout() 函数来延迟输出每个元素。最后,使用 ChangeDetectorRef 服务中的 detectChanges() 方法触发变更检测,更新视图并执行 setTimeout() 函数。
通过这种方法,可以避免 Angular 中 forEach() 中的 setTimeout() 函数被忽略的问题。