RXJS:如何取消订阅 RxJs 中没有取消订阅方法的可观察对象?

Opt*_*tiq 0 rxjs angular

我创建了一个Observable用于监听resizewindow对象的事件,它在我的组件中看起来像这样

export class MyComponent implements OnInit{

    WindowListener$: Observable<event> = new fromEvent(window, 'resize');

    ngOnInit(): void{
        
         this.WindowListener$.subscribe(() => this.readWindowSize());
    }
}
Run Code Online (Sandbox Code Playgroud)

readWindowSize()方法所做的只是读取窗口的高度和宽度,并检查它们是否大于特定大小,然后分别将布尔值切换为truefalse

通常,当我订阅某些内容时,我会在挂钩中取消订阅它,ngOnDestroy但是当我这样做时

ngOnDestroy(): void {
    
    this.WindowListener$.unsubscribe();

}
Run Code Online (Sandbox Code Playgroud)

我看到下面有红色的波浪线unsubscribe()。当我查看按 Observable 名称后弹出的列表中的可用方法时.,我没有看到unsubscribe()列表中存在任何方法。除非我弄错了,在 Angular 16 之前我已经这样做过好几次了,甚至已经养成了习惯。我需要通过其他方式关闭订阅吗?是否有一些更新现在可以自动执行,然后他们将其删除了?我不明白为什么我们可以在没有办法关闭订阅的情况下进行订阅。有人可以解释一下吗?

小智 5

unsubscribe()方法可用于 subscribe 方法返回的对象。于是修改了代码。

export class AppComponent implements OnInit {
  WindowListener$: Observable<event> = new fromEvent(window, 'resize');
  private _windowsSubscription:Subscription
  ngOnInit(): void{
    this._windowsSubscription =  this.WindowListener$.subscribe(() => this.readWindowSize());
  }

  ngOnDestroy(): void {
    
    this._windowsSubscription.unsubscribe();

  }
}
Run Code Online (Sandbox Code Playgroud)