【发布时间】:2020-10-22 20:36:01
【问题描述】:
当我通过 MediaObserver 观察媒体变化时,如何获取 MediaChange[] 的当前变化?
我观察到当前是数组MediaChange[]中的第一项,我可以使用第一项。 Bu 我还观察到,在 MediaChange has a priority 我还观察到当前更改具有最高优先级。哪个是最好的?
工作代码示例:
constructor(mediaObserver: MediaObserver) {
this.mediaObserverAsObservable = mediaObserver.asObservable().subscribe((changes: MediaChange[]) => {
// option A.
const currentMediaChange = changes[0];
if (currentMediaChange.mqAlias === 'sm' || currentMediaChange.mqAlias === 'xs') {
if (this.sidenav) {
this.sidenav.close();
}
} else {
if (this.sidenav) {
this.sidenav.open();
}
}
// Option B.
const maxPriority = changes.reduce(
(currentMax, mediaChange) => (mediaChange.priority > currentMax ? mediaChange.priority : currentMax),
changes[0].priority
);
const currentMediaChange = changes.find(mc => mc.priority === maxPriority);
if (currentMediaChange) {
if (currentMediaChange.mqAlias === 'sm' || currentMediaChange.mqAlias === 'xs') {
if (this.sidenav) {
this.sidenav.close();
}
} else {
if (this.sidenav) {
this.sidenav.open();
}
}
}
});
}
或者我可以使用 mediaObserver.isActive() 来识别与当前视口匹配的查询?
谢谢。
【问题讨论】: