我有一个服务,每隔 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)
是否每次实例化组件时都会以这种方式构建提供给组件的服务?如果我不销毁侦听器,每次加载此页面然后导航离开时是否会造成内存泄漏?
当组件被销毁时,组件提供的服务也会自动被销毁。
您可以通过服务中的 ngOnDestroy 生命周期挂钩进行测试:
ngOnDestroy(): void {
console.log('service destroyed');
}
Run Code Online (Sandbox Code Playgroud)
当组件被销毁时,它应该在控制台中写入“destroyed”。
| 归档时间: |
|
| 查看次数: |
1540 次 |
| 最近记录: |