2

ChangeDetectorRef.detectChangesNgZone.runOutsideAngular上下文中调用可以吗?我有通过WebSocket. Websocket 数据流非常密集,因此我将其包装成NgZone.runOutsideAngular. 各种服务订阅 websocket 数据,对其进行处理并报告它们自己的事件 ( Observables)。它们在角度区域外触发。Angular 组件订阅它们并在事件处理程序(观察者)中调用ChangeDetectorRef.detectChanges. 在大多数情况下,这可以正常工作。但在某些情况下,它会导致麻烦:ngFor 可能会在角度区域之外创建新元素/组件。此类组件的事件处理程序将触发超大角度。我知道我可以将它们包装到NgZone.run调用中,但这会导致我想要避免的全局变化检测。

UPDATE1:我创建示例来演示该问题: https ://stackblitz.com/edit/angular-5-change-detection-in-runoutsideangular-context 添加一些项目,然后尝试使用x按钮将其删除。

4

1 回答 1

0

事实上,您不应该ChangeDetectorRef.detectChanges在角度区域之外运行,因为如果在检查这些组件将在角度区域之外创建任何组件,则不会处理常见事件。

作为我的问题的解决方案,我在短时间内(250 毫秒)累积事件,然后在单个NgZone.run调用中处理它们。

于 2020-02-10T08:24:26.237 回答