为了选择表中的行,我尝试用键盘交互实现一个。
对于键盘交互,我使用了来自Cdk's- a11y模块的a11y,同时,keydown事件被附加到主机(mat-table)上。
this.keyManager = new FocusKeyManager<MatRowFocusableDirective>(
this.rows
).withHomeAndEnd();
@HostListener("keydown", ["$event"])
public onKeydownHandler(event: KeyboardEvent): void {
this.keyManager.onKeydown(event);
}在这一点上,一切正常。
但我希望扩展键盘交互,类似于Gmail的web应用程序:
这是可行的,但在应用程序中,我还使用了建立在CDK覆盖上的其他角度材料组件,如对话框、Selects、Bottomsheets等。
问题是,当打开这些组件之一时,表中的键盘交互仍然可用。
当打开任何CDK覆盖组件时,如何禁用表中的键盘交互?
发布于 2021-03-18 22:42:41
您可以尝试以下几种方法:
shouldFocusOnKeyboard属性的服务(按您的需要命名)。cdkMonitorSubtreeFocus或cdkMonitorElementFocus检测表外的元素何时收到焦点。cdkFocusChange事件更改shouldFocusOnKeyboard的值。document:keydown事件传递给keyManager。专业提示:
更好的设计可能是将shouldFocusOnKeyboard创建为一个BehaviorSubject<boolean>,并在您的事件处理程序中调用它。
https://stackoverflow.com/questions/66606562
复制相似问题