当组件被销毁时,提供给组件的角度服务是否也会被销毁?

nep*_*hiw 3 angular

我有一个服务,每隔 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();
  }
}
Run Code Online (Sandbox Code Playgroud)

我的服务有这样的结构:

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

是否每次实例化组件时都会以这种方式构建提供给组件的服务?如果我不销毁侦听器,每次加载此页面然后导航离开时是否会造成内存泄漏?

Plo*_*ppy 6

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

您可以通过服务中的 ngOnDestroy 生命周期挂钩进行测试:

ngOnDestroy(): void {
  console.log('service destroyed');
}
Run Code Online (Sandbox Code Playgroud)

当组件被销毁时,它应该在控制台中写入“destroyed”。

  • 这是否包括服务中的任何订阅也被取消订阅,或者这里是否存在潜在的泄漏? (2认同)