我有一个服务,该服务具有一个间隔,该间隔每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);
}
}
每次实例化组件时,是否都以这种方式为组件提供了服务?如果我不破坏侦听器,那么每次加载此页面然后离开浏览器时,都会造成内存泄漏吗?
答案 0 :(得分:2)
组件销毁后,组件提供的服务会自动销毁。
您可以通过服务中的ngOnDestroy生命周期钩子对此进行测试:
ClientRect
组件销毁后,它应该在控制台中写“ destroyed”。