cal*_*r47 4 rxjs angular-material2 angular
我已经习惯于取消订阅我在组件中初始化的订阅。推荐的方法是takeUntil像这样使用运算符:
killSubscriptions: new Subject<any> = new Subject();
ngOnInit(){
observableThing().pipe(takeUntil(this.killSubscriptions)).subscribe()
}
ngOnDestroy(){
this.killSubscriptions.next();
this.killSubscriptions.complete();
}
Run Code Online (Sandbox Code Playgroud)
但是前几天我正在使用覆盖和门户服务实现一个自定义对话框,并且我在Angular Material Library中的一个方法中间遇到了这个代码块。
// When the dialog backdrop is clicked, we want to close it.
if (config.hasBackdrop) {
overlayRef.backdropClick().subscribe(() => {
if (!dialogRef.disableClose) {
dialogRef.close();
}
});
}
Run Code Online (Sandbox Code Playgroud)
这个订阅是如何清理的?我唯一的猜测是在overlayRef处理时,订阅被清理。但是如何?
还有其他时候我们不需要处理取消订阅吗?
因为当 OverlayRef 被认为进入处置状态时,它们完成了观察者。
this._backdropClick.complete();
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!浏览源代码并试图理解它是一种很好且有趣的学习方式:)
编辑:如果您不确定您的观察者是否会完成,那么您需要确保您主动取消订阅以避免内存泄漏。你的 takeUntil 模式是一种方法。你甚至可以改变类型any来void拍摄对象。
| 归档时间: |
|
| 查看次数: |
699 次 |
| 最近记录: |