javascript - 销毁 merge() 运算符订阅?
问题描述
在本文中,merge
运算符用于订阅排序和分页事件。该函数如下所示:
merge(this.sort.sortChange, this.paginator.page)
.pipe(
tap(() => this.loadLessonsPage())
)
.subscribe();
当组件被销毁时,我们是否需要保留订阅并调用取消订阅?
解决方案
简短的回答:是的!
更多扩展答案:您不必手动操作!
您可以使用大量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 个值通过后完成并取消订阅。
针对您的情况的更具体的提示将需要一个更广泛的问题和一些您尝试过的示例。
推荐阅读
- angularjs - 错误:转换已被不同的转换取代
- node.js - 使用 Node.js、Express 和 Knex 将 PDF 文件上传和检索到 PostgreSQL
- c# - 任务计划程序创建任务观察者
- amazon-web-services - 如何通过使用 Amazon Certificate Manager (ACM) 将 https 应用于烧瓶
- reactjs - 如何在 React AG-grid 中获取固定的行数据
- javascript - 使用 Angular 6 的 RESTClient 的 nuxeo 客户端 sdk
- java - 从谷歌位置选择器 Place.getaddress() 中提取地址详细信息
- php - Laravel 验证最小值和正则表达式被输出到同一条消息
- java - 如何使用 selenium java 接受个人证书
- java - 如何授予 DLL 在 Windows Server 2016 上运行的权限?