我只是想知道使用其中一种而不是另一种有什么优势。
@HostListener( 'window:resize' )
doSomething(): void {
// ...throttle with setTimeout and clearTimeout maybe...
}
和
fromEvent( window, 'resize' ).pipe(
// ... debounceTime, takeUntil etc.
).subscribe( () => {
doSomething();
})
这真的只是一个上下文问题(例如,使用 pipeline() 更容易处理事件流),还是可观察的更“现代”,或者根本不重要?
谢谢!
最佳答案
fromEvent
将为您提供执行和管道衬里方面的更大灵活性,以及在 NgZone
上下文之外进行绑定(bind)的可能性。
@HoSTListener
的一个优点是您不必在事件触发后手动触发更改检测。当您的组件使用 OnPush
更改检测策略(这是建议的(但不是默认)策略)时,您确实需要使用 Observables
来实现这一点。在其他情况下,您需要在使用 fromEvent
时执行此操作,但这些都是非常边缘的情况。
HostListener
的另一个优点是,当组件销毁时,您不需要取消订阅,因为这是自动完成的。
所以主要是关于偏好和背景。
广告
有第三方libraries (我的)它扩展了 HostListener
和模板事件绑定(bind)内容,具有防抖和其他很酷的功能。
关于angular - Angular 的 @HostBinding( 'window:resize' ) 和 Rxjs 的 fromEvent( window, 'resize' ) 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66029688/