我应该在组件销毁上完成 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();
}
我在一个组件中提供了一项服务,所以如果组件要被销毁,它 运行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();
}