Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular RxJS-订阅/取消订阅vs filter()运算符_Angular_Rxjs - Fatal编程技术网

Angular RxJS-订阅/取消订阅vs filter()运算符

Angular RxJS-订阅/取消订阅vs filter()运算符,angular,rxjs,Angular,Rxjs,我有一个旋转器组件,是用角度写的。如果微调器组件处于活动状态,即微调器正在运行,则我需要订阅window.scroll事件以进行一些位置计算 我想知道在spinner运行时总是创建订阅,如果spinner不再运行则取消订阅是否是一个好主意。 或者,如果在组件初始化时创建一次订阅并使用筛选器操作符,在微调器处于活动状态时进入subscribe(),效果更好。当组件被破坏时取消订阅 我当前的实现与过滤器配合使用: this.scroll$ = Observable.fromEvent(window,

我有一个旋转器组件,是用角度写的。如果微调器组件处于活动状态,即微调器正在运行,则我需要订阅window.scroll事件以进行一些位置计算

我想知道在spinner运行时总是创建订阅,如果spinner不再运行则取消订阅是否是一个好主意。 或者,如果在组件初始化时创建一次订阅并使用筛选器操作符,在微调器处于活动状态时进入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();
    });

无论哪种方法在大多数应用程序中都应该可以很好地工作,但要确定最有效的方法,这将取决于几件事

主要问题是您订阅/取消订阅
.scroll
事件的频率。如果您每一两分钟只显示一次此微调器(并且只需要观看事件),我建议您进行完全订阅和取消订阅,即使组件未被销毁,因为这将最大限度地减少您需要观看的事件数量,但是如果微调器每隔几秒钟出现一次,您肯定只想过滤事件并取消订阅组件销毁

就处理而言,这两种方法的成本都相当低,因此无论您选择哪种方法,效果都很可能很小