Предположим, у нас есть несколько компонентов, каждый из которых должен иметь разные макеты/пользовательский интерфейс (шаблоны), обусловленные размерами экрана.
Мое решение состоит в том, чтобы создать такой компонент:
import {Component} from '@angular/core';
import {BreakpointObserver, Breakpoints} from '@angular/cdk/layout';
@Component({
selector: 'ui-switcher',
template: `
<ng-content *ngIf="isSmall" select="mobile"></ng-content>
<ng-content *ngIf="!isSmall" select="web"></ng-content>
`
})
export class UiSwitcherComponent {
public isSmall: boolean;
constructor(breakpointObserver: BreakpointObserver) {
breakpointObserver.observe([Breakpoints.Small, Breakpoints.XSmall]).subscribe(result => {
this.isSmall = result.matches;
});
}
}
и используйте его таким образом:
<ui-switcher>
<web>
<!-- a ui suited for large screens -->
</web>
<mobile>
<!-- a very different ui suited for small mobile screen displays-->
</mobile>
</ui-switcher>
Это решение может иметь некоторые подводные камни. Например, мы не можем использовать одни и те же ссылки на шаблоны в разделах <mobile>
и <web>
. (выше мы использовали #searchInput
и #searchInput2
).
Каковы рекомендации для таких ситуаций?