销毁merge()运算符订阅?

时间:2019-07-30 15:31:37

标签: javascript angular typescript rxjs angular-material

In this articlemerge运算符用于预订排序和分页事件。该函数如下所示:

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

我们需要保留订阅并在组件销毁时调用unsubscribe吗?

1 个答案:

答案 0 :(得分:1)

简短的回答:是的!

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

您可以使用大量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个值传递后完成并退订。

针对您的情况的更多具体提示将需要更广泛的问题以及您尝试过的示例。