可以从ChangeDetectorRef.detectChanges
上下文调用NgZone.runOutsideAngular
吗?我有一个角度应用程序,它通过WebSocket
接收数据。 Websocket数据流非常密集,因此我将其包装到NgZone.runOutsideAngular
中。各种服务订阅websocket数据,对其进行处理并报告自己的事件(Observables
)。它们在角度区域外触发。角组件对其进行订阅,并且在事件处理程序(观察者)中调用ChangeDetectorRef.detectChanges
。在大多数情况下,这可以。但是在某些情况下,这会带来麻烦:ngFor可能会在角度区域之外创建新的元素/组件。此类组件的事件处理程序将触发超大角度。
我知道我可以将它们包装到NgZone.run
调用中,但这将导致我希望避免全局更改检测。
UPDATE1:
我创建示例来演示该问题:
https://stackblitz.com/edit/angular-5-change-detection-in-runoutsideangular-context
添加一些项目,然后尝试使用x
按钮将其删除。
答案 0 :(得分:0)
实际上,您不应该在角度区域之外运行ChangeDetectorRef.detectChanges
,因为如果在该检查期间将创建任何组件,则此类组件将不在角度区域中,将无法处理常见事件。
作为解决我的问题的方法,我在短时间内(250ms)累积了事件,然后在单个NgZone.run
调用中对其进行处理。