我正在使用BehaviorSubject并使用异步管道订阅它,我需要在组件销毁时完成BehaviorSubject吗? *我没有在.ts文件中订阅它

推荐答案

complete()可以做两件事:

  1. 向其订阅者发送完成信号,从而触发其完成回调
  2. 取消订阅所有当前订阅者并阻止新订阅者订阅

因此,如果您只在组件中使用BehaviorSubject,并且只通过async管道使用它,它会自动管理其底层订阅(在其模板执行时立即启动订阅,在组件即将销毁时停止订阅),您不必调用complete().

但是,如果这BehaviorSubject存在于共享服务中和/或由多个订户使用,则呼叫complete()可能是错误的,因为您将为所有订户完成它,而不仅仅是您的组件.或者,根据你的需要,如果你真的想彻底清理这BehaviorSubject个,它可能真的是需要的.


总而言之,我认为有必要

  • 在主题共享的地方拨打complete(),或者您关心完成事件,以及
  • 在主题对您的类是"私有"的情况下,不要称之为"私有",您不关心完成事件,并确保取消订阅所有订阅,这听起来有很多条件,但对于大多数组件来说通常都是这样

Angular相关问答推荐

Change上的Angular 自定义控件无法正常工作

带有搜索功能的CDK-VIRTUAL-SCROLL-VIEPORT不显示该值

在Angular中使用ngFor进行表乘法

角路径S异步旋转变压器仍可观察到

如何防止打印后的空格后的HTML元素的Angular ?

从API动态加载MAT表数据时禁用分页

RxJS轮询+使用退避策略重试

为什么初始化值为 1 的BehaviorSubject 不能分配给类型number?

无法绑定到formControl,因为它不是input的已知属性

Angular 15 在 URL 中使用@进行路由

ngRouterOutlet和组件生命周期使用自定义模板渲染的问题

重新打开模态时 ng-select 中的重复值 - Angular

路由链接不在 Ionic 中执行

以 Angular 形式添加动态控件失败

执行ng generate environments时出错时需要合集和原理图

Angular 14 类型表单 - 数字控件的初始值

如何在angular 5的组件中格式化日期

在 Angular2 中跟踪 Google Analytics 页面浏览量

无法绑定到matDatepicker,因为它不是 input的已知属性

如何在 angular2 中的 div 的 contenteditable 上使用 [(ngModel)]?