У нас есть компонент панели инструментов, который является контейнером макета для всего приложения.
dashboard.html:
<md-sidenav-layout class="sidenav-layout">
<bv-toolbar (toggleSidenav)="start.toggle()" [screenWidth]="screenWidth"></bv-toolbar>
<md-sidenav #start [opened]="screenWidth > 1000" [mode]="(screenWidth > 1000) ? 'side' : 'start'">
<bv-sidenav-content [user]="user$ | async" [screenWidth]="screenWidth" (navClose)="start.toggle()"></bv-sidenav-content>
</md-sidenav>
<div class="sidenav-content"></div>
</md-sidenav-layout>
Обратите внимание, как мы посылаем значение screenWidth из приборной панели на панели инструментов (и sidenav) компонентов с помощью шаблона с помощью [screenWidth]="screenWidth"
.
dashboard.ts:
...
export class DashboardComponent {
screenWidth: number;
...
constructor (private cdr: ChangeDetectorRef, private store: Store<fromRoot.State>) {
var that = this;
// set screenWidth on page load
that.screenWidth = window.innerWidth;
window.onresize =() => {
// set screenWidth on screen size change
that.screenWidth = window.innerWidth;
that.cdr.detectChanges();
}
}
Теперь, когда screenWidth
установлен на нашей приборной панели, и послал через шаблон к другим компонентам, мы должны получить его в сценарии ребенка-компонента с помощью @Input()
, а затем он также будет доступен в шаблоне дочернего компонента.
toolbar.ts:
...
export class ToolbarComponent {
@Output() toggleSidenav = new EventEmitter();
@Input() screenWidth : number;
}
Это позволит шаблону панели инструментов, чтобы иметь доступ к screenWidth
переменным, определенным ранее в приборной панели, и получать обновления каждый раз, когда она меняется (так что вы можете установить логика один раз в приборной панели и наследуют это значение во всем мире через приложение
toolbar.html:.
<md-toolbar color="primary">
<button md-icon-button
(click)="toggleSidenav.emit()"
[ngClass]="{'h-hide': screenWidth > 1000}">
<md-icon>menu</md-icon>
</button>
</md-toolbar>
удалось вам выяснить это? Я просто столкнулся с этой самой проблемой с моим приложением ... – Narxx
@Narxx просто предоставил вам возможное решение – Alex
На самом деле, я подумал об этом вчера для себя ... Я могу поделиться своим решением с вами, если вам интересно: -) – Narxx