我应该在组件销毁上完成 BehaviorSubject – Angular2

Should I complete BehaviorSubject on the component destroy – Angular2

我在一个组件中提供了一项服务,所以如果组件要被销毁,它 运行s ngOnDestory。每个订阅 运行s 与 takeUntil(this.destory$)(在组件的 ngOnDestory 钩子上发出)或与 async 管道,所以当组件销毁时一切都取消订阅。

问题是,如果我在服务中有一个 BehaviorSubject,我是否应该 运行 它的 .complete() and/or .unsubscribe() 方法在服务的 ngOnDestory 中还是我可以继续使用?

是的,您应该在 ngOnDestroy 退订;如果主题在服务内部,则不一定要完成该主题,因为其他组件可能仍在使用该主题并且仍然需要它才能正常工作。

这些服务是单例的,但它们的生命周期取决于提供它们的注入器。如果您的服务是在根注入器中提供的,它与您的应用程序一样存在,所以当您再次创建需要该主题的组件时,如果不进行某种重新初始化,您将无法重用它。

您提到您确实有 takeUntil(this.destroy$),这不会导致内存泄漏,但请务必在 ngOnDestroy 内的 this.destroy$ 上调用 complete

ngOnDestroy() {
  this.destroy$.next();
  this.destroy$.complete();
}