Angular Material Flex MediaObserver 订阅了两次
Angular Material Flex MediaObserver Subscribed Twice
我正在使用 Material Flex Layout 来检测屏幕 size.But 我得到了订阅结果 twice.The 另一个 Angular 项目结果很好。
constructor(
public mediaObserver: MediaObserver) {
mediaObserver.media$.subscribe((change: MediaChange) => {
if ( change.mqAlias == 'xs') {
console.log('xsA');
}else if ( change.mqAlias == 'sm') {
console.log('xsB');
}else{
console.log('xsC');
}
});
}
这是我的代码。
很难说为什么您提供的代码会产生两次排放。但作为一种解决方法,您可以使用 rxjs distinctUntilKeyChanged operator;
constructor(public mediaObserver: MediaObserver) {
mediaObserver.media$.pipe(distinctUntilKeyChanged('mqAlias'))
.subscribe((change: MediaChange) => {
if (change.mqAlias == 'xs') {
console.log('xsA');
} else if (change.mqAlias == 'sm') {
console.log('xsB');
} else {
console.log('xsC');
}
});
}
此外,我发现了以下可能相关的问题;
我正在使用 Material Flex Layout 来检测屏幕 size.But 我得到了订阅结果 twice.The 另一个 Angular 项目结果很好。
constructor(
public mediaObserver: MediaObserver) {
mediaObserver.media$.subscribe((change: MediaChange) => {
if ( change.mqAlias == 'xs') {
console.log('xsA');
}else if ( change.mqAlias == 'sm') {
console.log('xsB');
}else{
console.log('xsC');
}
});
}
这是我的代码。
很难说为什么您提供的代码会产生两次排放。但作为一种解决方法,您可以使用 rxjs distinctUntilKeyChanged operator;
constructor(public mediaObserver: MediaObserver) {
mediaObserver.media$.pipe(distinctUntilKeyChanged('mqAlias'))
.subscribe((change: MediaChange) => {
if (change.mqAlias == 'xs') {
console.log('xsA');
} else if (change.mqAlias == 'sm') {
console.log('xsB');
} else {
console.log('xsC');
}
});
}
此外,我发现了以下可能相关的问题;