gpt4 book ai didi

angular - 在外部单击时关闭 mat-sidenav

转载 作者:行者123 更新时间:2023-12-05 07:32:31 26 4
gpt4 key购买 nike

每当用户点击不在侧边栏中的某个地方时,我都会尝试关闭侧边栏。我已经尝试过双向数据绑定(bind),现在正在尝试 rxjs' Subject

应用模板

<app-sidenav [openedSubject]="openedSubject"></app-sidenav>

应用组件

openedSubject = new Subject<boolean>();

@HostListener('click', ['$event']) clickedInside($event) {
this.openedSubject.next(false);
}

侧边导航组件

@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);
}

侧边导航模板

<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 event涵盖整个文档,而它应该排除 sidenav 和工具栏。

最佳答案

开始工作了。问题是我使用了 HostListener,而我真的只是想像这样 (click):

<sidenav [openedSubject]="openedSubject"></sidenav>

<fake-route-view (click)="dismissSidebar()"></fake-route-view>

完整版:https://stackblitz.com/edit/ng-sidenav-experiments

关于angular - 在外部单击时关闭 mat-sidenav,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51183914/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com