我有一个用Angular编写的微调器组件。如果微调器组件处于活动状态,即spinner正在运行,那么我需要订阅window.scroll事件来进行一些位置计算。
我想知道在微调器运行时始终创建订阅是否是个好主意,如果微调器不再运行则取消订阅。 或者,如果我在组件初始化并使用过滤器运算符时创建一次订阅会更好,则在微调器处于活动状态时进入subscribe()。只需在组件被销毁时取消订阅。
我当前的实现适用于过滤器:
this.scroll$ = Observable.fromEvent(window, 'scroll');
this.scrollSubscription = this.scroll$
// continue only if the spinner is active
.pipe(filter(() => this.isActive))
.subscribe(_e => {
this.doSomeStuff();
});
答案 0 :(得分:2)
无论哪种方式都可以在大多数应用程序中正常工作,但它将取决于几个方面来确定最有效的方法。
主要原因是您订阅/取消订阅.scroll
活动的频率。如果您每隔一两分钟只展示一次这个微调器(并且只需要观察事件),我建议您进行完全订阅并取消订阅,即使该组件未被销毁,因为这样可以最大限度地减少您需要观察的事件数量,但如果每隔几秒钟就会出现微调器,您肯定只想过滤事件并取消订阅组件销毁。
就处理而言,这两种成本都相当低,因此无论您选择何种路线,效果都可能很小。