Я пытаюсь закрыть боковую панель всякий раз, когда пользователь щелкает где-то не в ней. Я пробовал двустороннюю привязку данных, и теперь я пытаюсь с rxjs 'Subject
AppTemplate
<app-sidenav [openedSubject]="openedSubject"></app-sidenav>
AppComponent
openedSubject = new Subject<boolean>();
@HostListener('click', ['$event']) clickedInside($event) {
this.openedSubject.next(false);
}
SidenavComponent
@Input() openedSubject: Subject<boolean>;
@ViewChild('sidenav') sidenav: MatSidenav;
ngAfterContentInit() {
this.openedSubject.subscribe(opened => {
if(this.sidenav.opened) opened || this.sidenav.toggle();
});
}
toggle() {
this.openedSubject.next(!this.sidenav.opened);
}
SidenavTemplate
<mat-sidenav-container>
<mat-sidenav #sidenav><mat-toolbar color="primary">Menu</mat-toolbar>
</mat-sidenav>
<mat-sidenav-content>
<mat-toolbar color="primary">
<button (click)="toggle()">toggle</button>
</mat-toolbar>
</mat-sidenav-content>
</mat-sidenav-container>
https://stackblitz.com/edit/ng-sidenav-experiments
Но, похоже, есть логическая ошибка. Событие click
охватывает весь документ, тогда как оно должно исключать sidenav и панель инструментов.