组件销毁时,Angular服务是否也会被销毁?

3

我有一个服务,它每10秒检查一次数据状态,以更新组件中的标签。只有在组件所在的页面时才需要这样做。该组件类似于以下内容:

@Component({
  selector: 'editor-status',
  templateUrl: './editorStatus.component.html',
  providers: [EditorStatusService]
})
export class EditorStatusComponent implements OnDestroy {
  constructor(private service: EditorStatusService){};
  public ngOnDestroy(): void {
    service.destroy();
  }
}

我的服务有以下这种结构:

@Injector()
export class EditorStatusService {
  private intervalId: any;
  constructor() {
    this.intervalId = setInterval(() => { 
      /* code to update ui */ 
    }, 10000);
  }
  public destroy(): void {
    clearInterval(this.intervalId);
  }
}

这种方式提供给组件的服务是否每次实例化组件时都会重新构建?如果我不销毁监听器,那么每次加载并从页面导航离开时,都会创建内存泄漏吗?
1个回答

6

当组件被销毁时,由组件提供的服务会自动销毁。

您可以通过在服务中使用ngOnDestroy生命周期钩子来测试此功能:

ngOnDestroy(): void {
  console.log('service destroyed');
}

当组件被销毁时,控制台应该输出“destroyed”。


2
这是否包括服务中的任何订阅也被取消订阅,或者存在潜在的泄漏风险? - zpydee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接