微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使 mat-dialog 中的按钮也能在 Enter 上工作?

如何解决如何使 mat-dialog 中的按钮也能在 Enter 上工作?

我有一个 mat-dialog-Box,点击事件会关闭对话框,但我希望它也能在 Enter 按下时工作。有什么办法吗?

我尝试过使用表单,但没有奏效。以下是我尝试使用的解决方案:

HTML

<form (submit)="doAction()">
   <button type="submit">Add</button>
</form>

TS

doAction() {
  this.dialogRef.close({ event: this.action,data: this.local_data });
}

但是 Enter 事件没有发生,尽管点击它正在提交数据。如果我采用上述 HTML 方法,也适用于普通表单(不在对话框中)在 Enter 上工作。

有人可以提出这个问题吗?

解决方法

在你的对话框组件中添加一个 HostListener,像这样(一个完整但简单的组件):

一个完整的工作示例 here

HTML

<p>
my-dialog works!
</p>

<form (submit)="close()">
  <input type="text">
   <button type="submit">Add</button>
</form>

<button mat-button (click)="close()">Close</button>

TS

import { Component,HostListener,OnInit } from '@angular/core';
import { MatDialogRef } from '@angular/material/dialog';

@Component({
  selector: 'app-my-dialog',templateUrl: './my-dialog.component.html',styleUrls: ['./my-dialog.component.css']
})
export class MyDialogComponent implements OnInit {
  constructor(private dialogRef: MatDialogRef<MyDialogComponent>) { }

  @HostListener('window:keyup.Enter',['$event'])
  onDialogClick(event: KeyboardEvent): void {
    this.close();
  }
}

ngOnInit() {
}

close(): void {
  this.dialogRef.close(true);
}

}

,

无论您希望在单击“Enter”按钮时调用函数的位置,只需将此事件与(单击)事件一起添加

(keypress.enter)="yourFunction($event)"

这很完美。

按钮工作的实际键盘事件是通过单击空格键。

如果你的需求肯定是回车按钮,那么添加

(keypress.enter)="yourFunction($event)" 

否则只需添加

(keypress)="yourFunction($event)"

Keypress 事件适用于 keyUp 和 keyDown 事件。仅供参考

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。