【发布时间】:2022-01-08 10:41:12
【问题描述】:
我在实现 Kendo UI 弹出窗口的点击离开功能时遇到了一些问题,如下所述:https://www.telerik.com/kendo-angular-ui/components/popup/closing/
我的代码流程是用于实际过滤器弹出窗口的 [anchor] 是在容器中定义的。尽管如此,我确信这不是问题的一部分。我的组件文件(相关部分):
@ViewChild("anchor", { read: ElementRef}) public anchor: ElementRef;
@ViewChild("popup", { read: ElementRef }) public popup: ElementRef;
@HostListener("keydown", ["$event"])
public keydown(event: any): void {
if (event.keyCode === 27) {
this.onToggle(false);
}
}
@HostListener("document:click", ["$event"])
public documentClick(event: any): void {
if (!this.contains(event.target)) {
this.onToggle(false);
}
}
private contains(target: any): boolean {
return (
this.anchor?.nativeElement?.contains(target) ||
(this.popup ? this.popup.nativeElement.contains(target) : false)
);
}
public onToggle(show? : boolean): void {
this.show = show ?? !this.show;
}
HTML:
<button #anchor (click)="onToggle()" mat-raised-button color="list-button">
<div fxLayout="row" fxLayoutAlign="start center" fxLayoutGap="10px">
<fa-icon [icon]="faFilter" class="fa-sm"></fa-icon>
<div>Filter</div>
</div>
</button>
<div class="kendo-override-popup mimick-material-popup">
<kendo-popup #popup [popupAlign]="popupAlign" [anchorAlign]="anchorAlign"
[anchor]="inputAnchor" [type]="slide" [margin]="margin" *ngIf="show">
...
问题归结为单击按钮正确触发了切换,但是文档单击事件随后触发,并且它始终为包含返回 false,因此它也会自动关闭下拉列表。我运行了 kendo 在 stackblitz 中的示例,并且他们的视图子元素存在得很好,对我来说,无论我放在哪里,锚始终是未定义的,或者我是否读取了元素 ref
【问题讨论】: