Angular 5 即使我使用 setTimeout 也不会在长时间操作期间检测到变化
Angular 5 doesn't detect change during a long operation even if I use setTimeout
我正在尝试在我的应用从 csv 文件加载数据时显示 ngx-bootstrap 进度条。
问题:
ui 被冻结,直到整个操作结束
我用setTimeout拆分加载,递归调用。我还尝试调用 ngZone.run() 和 applicationRef.tick() 以及 changeDetectorRef.markForCheck() ...没有任何成功,进度条只在操作结束时显示完整。
我做了一个更简单的 stackblitz,所以你们可以告诉我如何实现它。它在我的代码中更简单 bcs 我把它放在一个服务中,我通过一个 observable 得到结果。但如果这至少有效,我会知道我做错了什么。
https://stackblitz.com/edit/angular-gzdylf
在您使用 setTimeout
拆分工作的示例中:
setTimeout(work());
这意味着您在循环内调用 work
函数,而不是稍后将其调度到 运行。
您需要更改它以将函数引用传递给 setTimeout
以使其按预期工作:
setTimeout(work); // NOTE: `work` and not `work()`
我正在尝试在我的应用从 csv 文件加载数据时显示 ngx-bootstrap 进度条。
问题: ui 被冻结,直到整个操作结束
我用setTimeout拆分加载,递归调用。我还尝试调用 ngZone.run() 和 applicationRef.tick() 以及 changeDetectorRef.markForCheck() ...没有任何成功,进度条只在操作结束时显示完整。
我做了一个更简单的 stackblitz,所以你们可以告诉我如何实现它。它在我的代码中更简单 bcs 我把它放在一个服务中,我通过一个 observable 得到结果。但如果这至少有效,我会知道我做错了什么。 https://stackblitz.com/edit/angular-gzdylf
在您使用 setTimeout
拆分工作的示例中:
setTimeout(work());
这意味着您在循环内调用 work
函数,而不是稍后将其调度到 运行。
您需要更改它以将函数引用传递给 setTimeout
以使其按预期工作:
setTimeout(work); // NOTE: `work` and not `work()`