销毁 merge() 运算符订阅? [复制]

Posted

技术标签:

【中文标题】销毁 merge() 运算符订阅? [复制]【英文标题】:Destroying a merge() operator subscription? [duplicate] 【发布时间】:2019-12-08 01:23:39 【问题描述】:

In this article a merge 运算符用于订阅排序和分页事件。函数如下所示:

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

我们是否需要在组件销毁时保持订阅并调用取消订阅?

【问题讨论】:

github.com/NetanelBasal/ngx-take-until-destroy 【参考方案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 个值后完成并取消订阅。

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

【讨论】:

那么它会以某种方式自动完成吗? 这应该是一个评论,伙计:) 我看到这个用了很多github.com/NetanelBasal/ngx-auto-unsubscribe 但我认为我们至少需要这样的东西并实现OnDestroy? 我建议使用takeUntil 方法(如果你不能使用async 管道),并有一个Subject,它只在ngOnDestroy 中发出。这使您免于拥有一千个订阅变量:ngOnDestroy() this.destroy$.next(true);

以上是关于销毁 merge() 运算符订阅? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

重载赋值运算符

拷贝控制——拷贝赋值与销毁

拷贝控制1(拷贝赋值与销毁)

C++primer知识点

C++primer知识点

C++C++的拷贝控制