首页 > 解决方案 > 您应该取消订阅 Angular 服务中的事件吗?

问题描述

我们有几个订阅构造函数中事件的 Angular 服务。我们正在尝试确定是否有必要取消订阅 ngOnDestroy() 方法中的事件。下面是代码示例:

import { Injectable, OnDestroy } from '@angular/core';

@Injectable()
export class DebuggerService implements OnDestroy {

  private _subscriptions$: any = [];

  constructor(private _localStorageService: LocalStorageService) {
    this._subscriptions$.push(this._localStorageService.storageChanged.subscribe((event: StorageEvent) => {
      //do something
    }));
  }

  ngOnDestroy(): void {
    for (let subscription$ of this._subscriptions$) {
      subscription$.unsubscribe();
    }
  }
}

一方面,在 ngOnDestroy() 中取消订阅事件似乎是一种很好的做法,特别是对于观察者来说,因为即使你销毁了一个组件,它们也会留下来。

另一方面,服务在 Angular 中是单例的。最多只能同时存在一个服务实例,并且当应用程序被销毁时它会被销毁,所以也许不需要取消订阅?

标签: angulareventsservicesingletonunsubscribe

解决方案


推荐阅读