angular - 我应该在 Angular 的 flex-layout 中取消订阅 MediaObserver 订阅吗?
问题描述
在 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...
}
}
);
}
我的问题是,我需要取消订阅mySubscription
in ngOnDestroy()
,还是MediaObserver
自己这样做?
解决方案
从 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
}
}
是的,您需要取消订阅ngOnDestroy()
。
推荐阅读
- linux-kernel - 为什么在 Linux 虚拟文件系统中,s_blocksize_bits 比普通二进制文件少一位?
- python-3.x - 自动尺寸注释框
- javascript - 小discord.js头像图片
- android - setSupportActionBar() 在 android studio 4.0 中不起作用
- firebase - 如何在 Firestore 中使用 WhereIn?
- apache-spark - 使用 Apache Spark 将数据存储导出到 GCS Bucket 中的 DATASTORE_BACKUP
- mysql - MySQL:删除 WordPress 上传路径之间的数字字符串
- xamarin - 如果是多个数组列表,我可以将它们存储在某处并调用它们,还是需要为每个 AL 创建单独的类
- sql - AND 的参数必须是布尔类型,而不是整数类型
- python - 我正在尝试使用 regex_replace 命令提取子字符串。我想在这里提取“SWIFTInward”