angular - Angular 的 @HostBinding( 'window:resize' ) 和 Rxjs 的 fromEvent( window, 'resize' ) 之间的区别

标签 angular observable settimeout

我只是想知道使用其中一种而不是另一种有什么优势。

@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/

相关文章:

angular - mouseenter/mouseleave 与@HostListener

Angular 5 RxJS 订阅计时问题

java - 链接没有显着返回值的 Observable

javascript - 使用 setTimeout 函数时出现问题

Javascript 使用 promise 等待条件为真

带有 settimeout 函数的 javascript 闭包

angular - 如何在惰性加载模块中提供服务并将该服务的范围限定为惰性加载模块及其组件?

javascript - Angular 2 - 如何在 init 上预填充 3 个表单组

Angular 2 - .http - 为什么我需要 .subscribe .map 或 .switchMap 才能使 console.log 正常工作?

javascript - 组合观测值并按日期排序