首页 > 解决方案 > 销毁 merge() 运算符订阅?

问题描述

在本文中,merge运算符用于订阅排序和分页事件。该函数如下所示:

    merge(this.sort.sortChange, this.paginator.page)
        .pipe(
            tap(() => this.loadLessonsPage())
        )
        .subscribe();

当组件被销毁时,我们是否需要保留订阅并调用取消订阅?

标签: javascriptangulartypescriptrxjsangular-material

解决方案


简短的回答:是的!

更多扩展答案:您不必手动操作!

您可以使用大量operators来帮助您管理订阅。完全不管理订阅的更好方法是让您的 HTML 使用AsyncPipe.

例子:

component

this.sortAndPaging = merge(this.sort.sortChange, this.paginator.page)
        .pipe(
            tap(() => this.loadLessonsPage())
        )
html

<div *ngIf="sortAndPaging | async as sortAndPaginaData">
 {{ sortAndPagingData | json }}
</div>

这样,Angular 的生命周期管理与AsyncPipe订阅本身相结合将跟踪和订阅/取消订阅。

正如我之前提到的,另一个强大的解决方案是使用operators来做到这一点。RxJS 带有许多强大的工具,例如, first()take(x)它们会自动为你完成和取消订阅。takeUntil()takeWhile()

take(10)例如,将在 10 个值通过后完成并取消订阅。

针对您的情况的更具体的提示将需要一个更广泛的问题和一些您尝试过的示例。


推荐阅读