我应该取消订阅 Angular 的 Flex 布局中的 MediaObserver 订阅吗?

Nic*_*amy 0 observable angular-flex-layout angular

在 Angular 组件中,我使用以下代码根据屏幕分辨率显示不同的元素:

constructor(private mediaObserver: MediaObserver) {}

private mySubscription: Subscription;

public ngOnInit(): void {
    this.mySubscription = this.mediaObserver.asObservable().subscribe(() => {
        if (this.mediaObserver.isActive('gt-md')) {
          // Do some stuff...
        }
      }
    );
  }
Run Code Online (Sandbox Code Playgroud)

我的问题是,我是否需要取消订阅mySubscriptionin ngOnDestroy(),还是需要MediaObserver自行取消订阅?

Msu*_*ven 5

来自 README.md 中的示例(https://github.com/angular/flex-layout/wiki/MediaObserver

export class MyDemo implements OnDestroy {
  watcher: Subscription;
  activeMediaQuery = '';

  constructor(mediaObserver: MediaObserver) {
    this.watcher = mediaObserver.media$.subscribe((change: MediaChange) => {
      this.activeMediaQuery = change ? `'${change.mqAlias}' = (${change.mediaQuery})` : '';
      if ( change.mqAlias == 'xs') {
         this.loadMobileContent();
      }
    });
  }

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

  loadMobileContent() { 
    // Do something special since the viewport is currently
    // using mobile display sizes
  }
}
Run Code Online (Sandbox Code Playgroud)

是的,您需要在 中取消订阅ngOnDestroy()

  • 你是对的。https://github.com/angular/flex-layout/blob/master/src/lib/core/media-observer/media-observer.ts 我在那里看不到任何可以处理取消订阅的内容。 (2认同)