销毁组件时向组件提供的角度服务是否已销毁?

时间:2018-08-21 22:30:43

标签: 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();
  }
}

我的服务具有以下结构:

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

每次实例化组件时,是否都以这种方式为组件提供了服务?如果我不破坏侦听器,那么每次加载此页面然后离开浏览器时,都会造成内存泄漏吗?

1 个答案:

答案 0 :(得分:2)

组件销毁后,组件提供的服务会自动销毁。

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

ClientRect

组件销毁后,它应该在控制台中写“ destroyed”。