2017-04-20 72 views
1

这些年来,我一直意识到自己对事件听众的清理。角度,观察物和垃圾收集?

在角度世界里,当你不使用first()takeX()等等的情况下,我应该怎么做。例如,考虑一个永远持续下去的表单控件。

this.myControl.valueChanges.subscribe((value) => { 
    console.log(value); 
}); 

让我们假设我现在已经完成了我的表单并且想继续前进。

我需要每一个可观察到的这样分配给Subscription财产,我需要一个addEventListener,所以我可以在以后removeEventListener参考以同样的方式?

如果出现了我不需要关心的情况,那么对此有没有很好的解释?

回答

3

当您完成后,您应该取消订阅。例如:

ngOnInit() { 
    this.sub = this.something$.subscribe(value => console.log(value)); 
} 

ngOnDestroy() { 
    this.sub.unsubscribe(); 
} 

您可以async管,它会自动退订的优势。

<p>{{ something$ |async }}</p> 

在这种情况下,您不必手动订阅/取消订阅。

垃圾收集

我做了一些测试前一段时间(不知道这仍然是相关的),但我注意到,当subscription()只是一个空的功能,浏览器释放内存越快。例如,如果你看一下Chrome的任务管理器内存使用和不退订:

this.something$.subscribe(value => console.log(value));  
this.something$.do(value => console.log(value)).subscribe(); 

内存使用量将下降为第2个的情况下,而不是针对第一种情况。不确定这是否是功能/错误/其他,以及它为什么发生;只是一个观察(: