ChangeDetectorRef.detectChanges
从NgZone.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
按钮将其删除。
实际上,您不应ChangeDetectorRef.detectChanges
在角度区域外运行,因为如果在检查期间创建了任何组件,则此类组件将不在角度区域内,将无法处理常见事件。
为了解决我的问题,我会在短时间内(250毫秒)累积事件,然后在一次NgZone.run
调用中处理它们。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句